/ Hex Artifact Content
Login

Artifact 83f438c59867d023c9d555243706a9edb4945662:


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 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
16b0: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
16c0: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
16d0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
16e0: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
16f0: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1700: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1710: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1720: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1730: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1740: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1750: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1760: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1770: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1780: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1790: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
17a0: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
17b0: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
17c0: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
17d0: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
17e0: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
17f0: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1800: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1810: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1820: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1830: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1840: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1850: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1860: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1870: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1880: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1890: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
18a0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
18b0: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
18c0: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
18d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
18e0: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
18f0: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1910: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1920: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1930: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1940: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1950: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1960: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1970: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1980: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1990: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
19a0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
19b0: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
19c0: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
19d0: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
19e0: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
19f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1a00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1a10: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1a20: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45  ** The SQLITE_DE
1a30: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
1a40: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1a50: 66 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20  fined as either 
1a60: 30 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65  0 or 1..** It de
1a70: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
1a80: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74   or not the feat
1a90: 75 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  ures related to 
1aa0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  .** SQLITE_CONFI
1ab0: 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20  G_MEMSTATUS are 
1ac0: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ad0: 61 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69  ault or not. Thi
1ae0: 73 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62  s value can.** b
1af0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  e overridden at 
1b00: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
1b10: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  e sqlite3_config
1b20: 28 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21  () API..*/.#if !
1b30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b40: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1b50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b60: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1b70: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1b80: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1b90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba0: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1bb0: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1bc0: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1bd0: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1be0: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1bf0: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1c00: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1c10: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1c20: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1c30: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1c40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1c50: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1c60: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1c70: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1c80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1c90: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1ca0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1cb0: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1cc0: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1cd0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1ce0: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1cf0: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1d00: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1d10: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1d20: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1d30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1d40: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1d50: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1d60: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1d70: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1d80: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1d90: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
1da0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
1db0: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
1dc0: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
1dd0: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
1de0: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
1df0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
1e00: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
1e10: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
1e20: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
1e30: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1e40: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1e50: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1e60: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1e70: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1e80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1e90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1ea0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1eb0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
1ec0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1ed0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
1ee0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1ef0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1f00: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1f10: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1f40: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1f50: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1f60: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1f70: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1f80: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1f90: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
1fa0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
1fb0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
1fc0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
1fd0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1fe0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1ff0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2010: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2020: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2030: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2040: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2050: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
2060: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2070: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
2080: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2090: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
20a0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
20b0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
20c0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
20d0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
20e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
20f0: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2100: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2110: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2120: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2130: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
2140: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2150: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
2160: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
2170: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
2180: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
2190: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
21a0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
21b0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
21c0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
21d0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
21e0: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
21f0: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2200: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2210: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2220: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2230: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
2240: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
2250: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
2260: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
2270: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
2280: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
2290: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
22a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
22b0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
22c0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
22d0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
22e0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
22f0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2300: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2310: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2320: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2330: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
2340: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
2350: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
2360: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
2370: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
2380: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
2390: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
23a0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
23b0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
23c0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23d0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
23e0: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
23f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2400: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2410: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2420: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2430: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
2440: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
2450: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
2460: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
2470: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
2480: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
2490: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
24a0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
24b0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
24d0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
24e0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24f0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2500: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2510: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2520: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2530: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2540: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2550: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2560: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2570: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2580: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2590: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
25a0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
25c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
25d0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
25e0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
25f0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2600: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2610: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2620: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2630: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
2640: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2650: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2660: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2670: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2680: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2690: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
26a0: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
26b0: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
26c0: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
26d0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
26e0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
26f0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2700: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2710: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2720: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2730: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2740: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2750: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2760: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2770: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2780: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2790: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
27a0: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
27b0: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
27c0: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
27d0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
27e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
27f0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2800: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2810: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2820: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2830: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2840: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2850: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2860: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2870: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2880: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2890: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
28a0: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
28b0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
28c0: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28d0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
28e0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
28f0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2900: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2910: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2920: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2930: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2940: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2950: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2960: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2970: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2980: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2990: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
29a0: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
29b0: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
29c0: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
29d0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
29e0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
29f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2a00: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2a10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2a20: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2a30: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2a40: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2a50: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2a60: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2a70: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2a80: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2a90: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2aa0: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2ab0: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2ac0: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2ad0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2ae0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2af0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2b00: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2b10: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2b20: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2b30: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2b40: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2b50: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2b60: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2b70: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2b80: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2b90: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2ba0: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2bb0: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2bc0: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2bd0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2be0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2bf0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2c00: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2c10: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2c20: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2c30: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2c40: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2c50: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2c60: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2c70: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2c80: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2c90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2ca0: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2cb0: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2cc0: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2cd0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ce0: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2cf0: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2d00: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2d10: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2d20: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2d30: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2d40: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2d50: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2d60: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2d70: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2d80: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2d90: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
2da0: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
2db0: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
2dc0: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
2dd0: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
2de0: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
2df0: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
2e00: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
2e10: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
2e20: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
2e30: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
2e40: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
2e50: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
2e60: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
2e70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
2e80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2e90: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
2ea0: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
2eb0: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
2ec0: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
2ed0: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
2ee0: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
2ef0: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
2f00: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
2f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2f20: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2f30: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2f40: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
2f50: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
2f60: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
2f70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
2f80: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
2f90: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
2fa0: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
2fb0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2fc0: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
2fd0: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
2fe0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2ff0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3000: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3010: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3020: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3030: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
3040: 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e  he input is a in
3050: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
3060: 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69  o large.** to fi
3070: 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54  t in 32-bits.  T
3080: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
3090: 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69  d inside of vari
30a0: 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a  ous testcase().*
30b0: 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69  * macros to veri
30c0: 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20  fy that we have 
30d0: 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f  tested SQLite fo
30e0: 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70  r large-file sup
30f0: 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  port..*/.#define
3100: 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20   IS_BIG_INT(X)  
3110: 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66  (((X)&~(i64)0xff
3120: 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a  ffffff)!=0)../*.
3130: 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c  ** The macro unl
3140: 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e  ikely() is a hin
3150: 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73  t that surrounds
3160: 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78   a boolean.** ex
3170: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3180: 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20   usually false. 
3190: 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20   Macro likely() 
31a0: 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62  surrounds.** a b
31b0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
31c0: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
31d0: 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68  y true.  These h
31e0: 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69  ints could,.** i
31f0: 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65  n theory, be use
3200: 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  d by the compile
3210: 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65  r to generate be
3220: 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a  tter code, but.*
3230: 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79  * currently they
3240: 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e   are just commen
3250: 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61  ts for human rea
3260: 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ders..*/.#define
3270: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58   likely(X)    (X
3280: 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  ).#define unlike
3290: 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63  ly(X)  (X)..#inc
32a0: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
32b0: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
32c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
32d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
32e0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
32f0: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
3300: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
3310: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
3320: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
3330: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
3340: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
3350: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
3360: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
3370: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
3380: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
3390: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
33a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
33b0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
33c0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
33d0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
33e0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
33f0: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
3410: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
3420: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3430: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
3440: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
3450: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
3460: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
3470: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3480: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
3490: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
34a0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
34b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
34c0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
34d0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
34e0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
34f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3500: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3520: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
3530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
3540: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
3550: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
3560: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
3570: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
3580: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
3590: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
35a0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
35b0: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
35c0: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
35d0: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
35e0: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
35f0: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
3600: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
3610: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
3620: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
3630: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
3640: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3650: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3660: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
3670: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
3680: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
3690: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
36a0: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
36b0: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
36c0: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
36e0: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
36f0: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
3700: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
3710: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
3720: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
3730: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
3740: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
3750: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
3760: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
3770: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
3780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3790: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
37a0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
37b0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
37c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
37d0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
37e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
37f0: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
3800: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
3810: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
3820: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
3830: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
3840: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3850: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
3860: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3880: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
3890: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
38a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
38b0: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
38c0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
38d0: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
38e0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
38f0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
3900: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
3910: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3930: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
3940: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
3950: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
3960: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
3970: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
3980: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3990: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
39a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
39b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
39c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
39d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
39e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
39f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3a00: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3a10: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3a20: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
3a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
3a40: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
3a50: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
3a60: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
3a70: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rs..*/.#define M
3a80: 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29  IN(A,B) ((A)<(B)
3a90: 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e  ?(A):(B)).#defin
3aa0: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
3ab0: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a  (B)?(A):(B))../*
3ac0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ad0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
3ae0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
3af0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
3b00: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
3b10: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
3b20: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
3b30: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
3b40: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
3b50: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
3b60: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
3b70: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
3b80: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
3b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
3ba0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
3bb0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
3bc0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
3bd0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
3be0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
3bf0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
3c00: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
3c10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
3c20: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
3c30: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
3c40: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
3c50: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
3c60: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
3c70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
3c80: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
3c90: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
3ca0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
3cb0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
3cc0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
3cd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
3ce0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
3cf0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3d00: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
3d10: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
3d20: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3d30: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
3d40: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
3d50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3d60: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
3d70: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3d80: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
3d90: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
3da0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3db0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
3dc0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
3dd0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3de0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
3df0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
3e00: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3e10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3e20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
3e30: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
3e40: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
3e50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3e60: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
3e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e80: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
3e90: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
3ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
3eb0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3ec0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
3ed0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
3ee0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
3ef0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
3f00: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
3f10: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3f20: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
3f30: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
3f40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
3f50: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
3f60: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
3f70: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
3f80: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
3f90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3fa0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3fb0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
3fc0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
3fd0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3fe0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
3ff0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4000: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4010: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4020: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4030: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4040: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4050: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4060: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4070: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
4080: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
4090: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
40a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
40b0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
40c0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
40d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
40e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
40f0: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4100: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4120: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4130: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4140: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4150: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4160: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4170: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
4180: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
4190: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
41a0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
41b0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
41c0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
41d0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
41e0: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
41f0: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4200: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4210: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4220: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4240: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4250: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4260: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4270: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
4280: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
42a0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
42b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
42c0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
42d0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
42e0: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
42f0: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4300: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4310: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4320: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4330: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4340: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4350: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4360: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4370: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
4380: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
4390: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
43a0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
43b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
43c0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
43d0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
43e0: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
43f0: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4400: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4410: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4420: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4430: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4440: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4450: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4460: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4470: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
4480: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
4490: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
44a0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
44b0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
44c0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
44d0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
44e0: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
44f0: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4500: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4510: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4520: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4530: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4540: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4550: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4560: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4570: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4580: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74  e LogEst quantat
4590: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
45a0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
45b0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
45c0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
45d0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
45e0: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
45f0: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4600: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4610: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4620: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4630: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4640: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4650: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4660: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4670: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4680: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4690: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
46a0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
46b0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
46c0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
46d0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
46e0: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
46f0: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4700: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4710: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4720: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4730: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4740: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4750: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4760: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4770: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4780: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4790: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
47a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
47b0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
47c0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
47d0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
47e0: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
47f0: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4800: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
4810: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
4820: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
4830: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
4840: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
4850: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
4860: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
4870: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
4880: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
4890: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
48a0: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
48b0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
48c0: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
48d0: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
48e0: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
48f0: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
4900: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
4910: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
4920: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4930: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
4940: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
4950: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
4960: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
4970: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4980: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4990: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
49a0: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
49b0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
49c0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
49d0: 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29  f (defined(i386)
49e0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
49f0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
4a00: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
4a10: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
4a20: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
4a30: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
4a40: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
4a50: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
4a60: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
4a70: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
4a80: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
4a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
4aa0: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
4ab0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
4ac0: 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  )) && !defined(S
4ad0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
4ae0: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
4af0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
4b00: 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66  ER    1234.# def
4b10: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
4b20: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
4b30: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
4b40: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
4b50: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
4b60: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
4b70: 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16LE.#endif.#if 
4b80: 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20  (defined(sparc) 
4b90: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4ba0: 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26  ppc__))  \.    &
4bb0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
4bc0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4bd0: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
4be0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
4bf0: 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20    4321.# define 
4c00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4c10: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
4c20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
4c30: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
4c40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4c50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
4c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45  ined(SQLITE_BYTE
4c80: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
4c90: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
4ca0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d      0     /* 0 m
4cb0: 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74  eans "unknown at
4cc0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a   compile-time" *
4cd0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
4ce0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
4cf0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
4d00: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
4d10: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
4d20: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
4d30: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
4d40: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
4d50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4d60: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4d70: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4d80: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4d90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4da0: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4db0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4dc0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4dd0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4de0: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4df0: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
4e00: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
4e10: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
4e20: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
4e30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
4e40: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
4e50: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4e60: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4e70: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4e80: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4e90: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4ea0: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4eb0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4ec0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4ed0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4ee0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4ef0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
4f00: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
4f10: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
4f20: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
4f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4f40: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
4f50: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4f60: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4f70: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4f80: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4f90: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4fa0: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4fb0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4fc0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4fd0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4fe0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4ff0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
5000: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
5010: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
5020: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
5030: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
5040: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
5050: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
5060: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
5070: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
5080: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
5090: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
50a0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
50b0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
50c0: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
50d0: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
50e0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
50f0: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
5100: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
5110: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
5120: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
5130: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5140: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
5150: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
5160: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
5170: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
5180: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
5190: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
51a0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
51b0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
51c0: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
51d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
51e0: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
51f0: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
5200: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
5210: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
5220: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
5230: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
5240: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
5250: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5260: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
5270: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5280: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
5290: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
52a0: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
52b0: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
52c0: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
52d0: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
52e0: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
52f0: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
5300: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
5310: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
5320: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
5330: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5340: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
5350: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5360: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
5370: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
5380: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
5390: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
53a0: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
53b0: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
53c0: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
53d0: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
53e0: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
53f0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
5400: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
5410: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5420: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
5430: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
5440: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
5450: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5460: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
5470: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
5480: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5490: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
54a0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
54b0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
54c0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
54d0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
54e0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
54f0: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
5500: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
5510: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
5520: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
5530: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
5540: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
5550: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
5560: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
5570: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
5580: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5590: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
55c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
55d0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
55e0: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
55f0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5600: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
5610: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5620: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
5630: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
5640: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5650: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
5660: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5670: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
5680: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
56a0: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
56b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
56c0: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
56d0: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
56e0: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
56f0: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
5700: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5710: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
5720: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
5730: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
5740: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5750: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
5760: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5770: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
5780: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5790: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
57a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
57b0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
57c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
57d0: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
57e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
57f0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
5800: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5810: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
5820: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
5830: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5840: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
5850: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5870: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5880: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5890: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
58a0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
58b0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
58c0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
58d0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
58e0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
58f0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5900: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5910: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5920: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5930: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5940: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5950: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5960: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5970: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5980: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5990: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
59a0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
59b0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
59c0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
59d0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
59e0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
59f0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5a00: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5a10: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5a20: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5a30: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5a40: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5a50: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5a60: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5a70: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5a80: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5a90: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5aa0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5ab0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5ac0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5ad0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5ae0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5af0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5b00: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5b10: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
5b20: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
5b30: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
5b40: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
5b50: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5b60: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5b70: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5b80: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5b90: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5ba0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5bb0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5bc0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5bd0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5be0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5bf0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
5c00: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
5c10: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
5c20: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
5c30: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
5c40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
5c50: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5c60: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5c70: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5c80: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5c90: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5ca0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5cb0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5cc0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5cd0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5ce0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5cf0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
5d00: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
5d10: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
5d20: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
5d30: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
5d40: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
5d50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5d60: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5d70: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5d80: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5d90: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5da0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5db0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5dc0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5dd0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5de0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5df0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
5e00: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
5e10: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
5e20: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
5e30: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
5e40: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
5e50: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5e60: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5e70: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5e80: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5e90: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5ea0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5eb0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5ec0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5ed0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5ee0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5ef0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
5f00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5f10: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
5f20: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
5f30: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
5f40: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
5f50: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5f60: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5f70: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5f80: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5f90: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5fa0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5fb0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5fc0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5fd0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5fe0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5ff0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6000: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6010: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6020: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6030: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6040: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6050: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6060: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6070: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6080: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6090: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
60a0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
60b0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
60c0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
60d0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
60e0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
60f0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
6100: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
6110: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6120: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6130: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6140: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6150: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6160: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6170: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6180: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6190: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
61a0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
61b0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
61c0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
61d0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
61e0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
61f0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
6200: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
6210: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6220: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6230: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6240: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6250: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6260: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6280: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6290: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
62a0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
62b0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
62c0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
62d0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
62e0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
62f0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
6300: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
6310: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6320: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6330: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6340: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6350: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6360: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6370: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6380: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6390: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
63a0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
63b0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
63c0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
63d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
63e0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
63f0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
6400: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
6410: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6420: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6430: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6440: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6450: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6460: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6470: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6480: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6490: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
64a0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
64b0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
64c0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
64d0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
64e0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
64f0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
6500: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
6510: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6520: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6530: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6540: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6550: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6560: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6570: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6580: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6590: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
65a0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
65b0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
65c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
65d0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
65e0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
65f0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6600: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6610: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6620: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6630: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6640: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6650: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6660: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6670: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6680: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6690: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
66a0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
66b0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
66c0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
66d0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
66e0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
66f0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6700: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6710: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6720: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6730: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6740: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6750: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6760: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6770: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6780: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6790: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
67a0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
67b0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
67c0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
67d0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
67e0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
67f0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6800: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6810: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6820: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6830: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6840: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6850: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6860: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6870: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6880: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6890: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
68a0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
68b0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
68c0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
68d0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
68e0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
68f0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6900: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6910: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6920: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6930: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6940: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6950: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6960: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6970: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6980: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
69a0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
69b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69c0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
69d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69e0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
69f0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6a00: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6a10: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6a20: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6a40: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6a50: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6a60: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6a70: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6a80: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6a90: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6aa0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6ab0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6ac0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6ad0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6ae0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6af0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6b00: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6b10: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
6b20: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
6b30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6b40: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
6b50: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
6b60: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
6b70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6b80: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
6b90: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
6ba0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6bb0: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
6bc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
6bd0: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
6be0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6bf0: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
6c00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c10: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
6c20: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
6c30: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
6c40: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
6c50: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
6c60: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
6c70: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
6c80: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
6c90: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
6ca0: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
6cb0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
6cc0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
6cd0: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
6ce0: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
6cf0: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
6d00: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
6d10: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
6d20: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
6d30: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
6d40: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
6d50: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
6d60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d70: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
6d80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
6d90: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
6da0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
6db0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
6dc0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
6dd0: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
6de0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6df0: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
6e00: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
6e10: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
6e20: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
6e30: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
6e40: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
6e50: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
6e60: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
6e70: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
6e80: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
6e90: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
6ea0: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
6eb0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
6ec0: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
6ed0: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
6ee0: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
6ef0: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
6f00: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
6f10: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
6f20: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
6f30: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
6f40: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
6f50: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
6f60: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
6f70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6f80: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
6f90: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
6fa0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
6fb0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
6fc0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
6fd0: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
6fe0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
6ff0: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
7000: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
7010: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
7020: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
7030: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
7040: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7050: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
7060: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
7070: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
7080: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
7090: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
70a0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
70b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
70c0: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
70d0: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
70e0: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
70f0: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
7100: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
7110: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
7120: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
7130: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
7140: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7150: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
7160: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
7170: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
7180: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7190: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
71a0: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
71b0: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
71c0: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
71d0: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
71e0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
71f0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
7200: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
7210: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
7220: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
7230: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
7240: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7250: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
7260: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
7270: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
7280: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
7290: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
72a0: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
72b0: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
72c0: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
72d0: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
72e0: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
72f0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
7300: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
7310: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
7320: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
7330: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
7340: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7350: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
7360: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
7370: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
7380: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
7390: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
73a0: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
73b0: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
73c0: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
73d0: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
73e0: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
73f0: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
7400: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
7410: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
7420: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7430: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
7440: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7450: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
7460: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
7470: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
7480: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
7490: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
74a0: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
74b0: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
74c0: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
74d0: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
74e0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
74f0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
7500: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
7510: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
7520: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
7530: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7540: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7550: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
7560: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
7570: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
7580: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7590: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
75a0: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
75b0: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
75c0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
75d0: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
75e0: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
75f0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7600: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7610: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7620: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7630: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7640: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7650: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
7660: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
7670: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
7680: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
7690: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
76a0: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
76b0: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
76c0: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
76d0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
76e0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
76f0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7700: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7710: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7720: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
7730: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7740: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7750: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7760: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7770: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7780: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7790: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
77a0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
77b0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
77c0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
77d0: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
77e0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
77f0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7800: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7810: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7820: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7830: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
7840: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
7850: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
7860: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
7870: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7880: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
7890: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
78a0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
78b0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
78c0: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
78d0: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
78e0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
78f0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
7900: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
7910: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
7920: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
7930: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
7940: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
7950: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
7960: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
7970: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
7980: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
7990: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
79a0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
79b0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
79c0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
79d0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
79e0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
79f0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
7a00: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
7a10: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
7a20: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
7a30: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
7a40: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
7a50: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
7a60: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
7a70: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
7a80: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
7a90: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
7aa0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
7ab0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
7ac0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
7ad0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
7ae0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
7af0: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
7b00: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
7b10: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
7b20: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
7b30: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
7b40: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
7b50: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
7b60: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
7b70: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
7b80: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
7b90: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
7ba0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
7bb0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
7bc0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
7bd0: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
7be0: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
7bf0: 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29  TRIGGER_DEPTH+1)
7c00: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
7c10: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
7c20: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
7c30: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
7c40: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
7c50: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
7c60: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
7c70: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
7c80: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
7c90: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7ca0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
7cb0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7cc0: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
7cd0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
7ce0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
7cf0: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
7d00: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
7d10: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
7d20: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
7d30: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
7d40: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
7d50: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
7d60: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
7d70: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
7d80: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
7d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
7da0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
7db0: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
7dc0: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
7dd0: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
7de0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
7df0: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
7e00: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
7e10: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
7e20: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
7e30: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
7e40: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
7e50: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
7e60: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
7e70: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
7e80: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
7e90: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
7ea0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
7eb0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7ec0: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
7ed0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
7ee0: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
7ef0: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
7f00: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
7f10: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
7f20: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
7f30: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
7f40: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
7f50: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
7f60: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
7f70: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
7f80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
7f90: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
7fa0: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
7fb0: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
7fc0: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
7fd0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
7fe0: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
7ff0: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
8000: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
8010: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
8020: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
8030: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
8040: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
8050: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
8060: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
8070: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
8080: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
8090: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
80a0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
80b0: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
80c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
80d0: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
80e0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
80f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
8100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8110: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
8120: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
8130: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
8140: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
8150: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
8160: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
8170: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61  t */.  int anSta
8180: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
8190: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
81a0: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
81b0: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
81c0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
81d0: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
81e0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
81f0: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
8200: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
8210: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
8220: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
8230: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
8240: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
8250: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8260: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
8270: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
8280: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
8290: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
82a0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
82b0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
82c0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
82d0: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
82e0: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
82f0: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
8300: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  or function defi
8310: 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48  nitions..**.** H
8320: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
8330: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
8340: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
8350: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
8360: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
8370: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
8380: 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  ef.pHash chain..
8390: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
83a0: 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65  fHash {.  FuncDe
83b0: 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20  f *a[23];       
83c0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
83d0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
83e0: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  ;../*.** Each da
83f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8400: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
8410: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8420: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
8430: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
8440: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
8450: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
8460: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
8470: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
8480: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
8490: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
84a0: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
84b0: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
84c0: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
84d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
84e0: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
84f0: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
8500: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
8510: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
8520: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
8530: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
8540: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8560: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
8570: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
85a0: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
85b0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
85c0: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
85e0: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
85f0: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
8600: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
8610: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8620: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
8630: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
8640: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
8650: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8670: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
8680: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
8690: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
86a0: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
86b0: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
86c0: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
86d0: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
86e0: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
86f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8700: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
8710: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
8720: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
8750: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
8760: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
8770: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
8780: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
8790: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
87a0: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
87b0: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
87c0: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
87e0: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
87f0: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
8800: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
8810: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
8820: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
8830: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
8840: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
8850: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8860: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
8870: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
8880: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
8890: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
88a0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
88b0: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
88c0: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
88d0: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
88e0: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
88f0: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
8900: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
8910: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
8920: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8940: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
8950: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
8960: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
8970: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
8980: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
8990: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
89a0: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
89b0: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
89c0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
89d0: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
89e0: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
89f0: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
8a00: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
8a10: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
8a20: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
8a30: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
8a40: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
8a50: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
8a60: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
8a70: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
8a80: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
8a90: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
8aa0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
8ab0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
8ac0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
8ad0: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
8ae0: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
8af0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
8b00: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
8b10: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
8b20: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
8b30: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
8b40: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
8b50: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74  * Limits */.  st
8b60: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
8b70: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
8b80: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
8b90: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
8ba0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
8bb0: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
8bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
8bd0: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
8be0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
8bf0: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c10: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
8c20: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
8c30: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
8c40: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8c60: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
8c70: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
8c80: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
8c90: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
8ca0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
8cb0: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
8cc0: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
8cd0: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
8ce0: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
8cf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8d00: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
8d10: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
8d20: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
8d30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8d40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8d50: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8d60: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
8d70: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
8d80: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8d90: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8da0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8db0: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
8dc0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
8dd0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
8de0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
8df0: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
8e00: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
8e10: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
8e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8e30: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
8e40: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
8e50: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
8e60: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
8e70: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
8e80: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
8e90: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
8ea0: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
8eb0: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
8ec0: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
8ed0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
8ee0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f00: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
8f10: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
8f20: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
8f30: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
8f40: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
8f50: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
8f60: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8f70: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8fa0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
8fb0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
8fc0: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8fe0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
8ff0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
9000: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
9010: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
9020: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
9030: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
9040: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
9050: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9070: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
9080: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
9090: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
90a0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
90b0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
90c0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
90d0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
90e0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
90f0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
9100: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
9110: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
9120: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
9130: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
9140: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
9150: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
9160: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
9170: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
9180: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
9190: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
91a0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
91b0: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
91c0: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
91d0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
91e0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
91f0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
9200: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
9210: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
9220: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
9230: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
9240: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
9250: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
9260: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
9270: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
9280: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
9290: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
92a0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
92b0: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
92c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
92d0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
92e0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
92f0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
9300: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
9310: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
9320: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
9330: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
9340: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
9350: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
9360: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
9370: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
9380: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
9390: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
93a0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
93b0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
93c0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
93d0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
93e0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
93f0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
9400: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
9410: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
9420: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
9430: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
9440: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
9450: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
9460: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
9470: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
9480: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
9490: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
94a0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
94b0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
94c0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
94d0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
94e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
94f0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20  ORIZATION.  int 
9500: 28 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c 69  (*xAuth)(void*,i
9510: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
9520: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9530: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9540: 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r*);.           
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9560: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
9570: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
9580: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9590: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
95a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
95b0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
95c0: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
95d0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
95e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
95f0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9600: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
9610: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
9620: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
9630: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9640: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
9650: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
9660: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9670: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
9680: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
9690: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
96a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
96b0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
96c0: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
96d0: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
96e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
96f0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
9700: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9720: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
9730: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
9740: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9760: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
9770: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
9780: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
9790: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
97a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
97b0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
97c0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
97d0: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
97e0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
97f0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
9800: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
9810: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
9820: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
9830: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
9840: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
9850: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
9860: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
9870: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
9880: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
9890: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
98a0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
98b0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
98c0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98e0: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
98f0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
9900: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
9910: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
9920: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
9930: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
9940: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
9950: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
9960: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
9970: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
9980: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
9990: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
99a0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
99b0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
99c0: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
99e0: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
99f0: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
9a00: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
9a10: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
9a20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
9a30: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
9a40: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
9a50: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a70: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
9a80: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
9a90: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
9aa0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ac0: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
9ad0: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
9ae0: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
9af0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
9b00: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
9b10: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
9b20: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
9b30: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
9b40: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
9b50: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
9b60: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
9b70: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
9b80: 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   */..#ifdef SQLI
9b90: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
9ba0: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
9bb0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
9bc0: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
9bd0: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
9be0: 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a  ATIC_MASTER .  *
9bf0: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
9c00: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
9c10: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
9c20: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
9c30: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  . .  **.  ** Whe
9c40: 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  n X.pUnlockConne
9c50: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
9c60: 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77  eans that X is w
9c70: 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a  aiting for Y to.
9c80: 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74    ** unlock so t
9c90: 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65  hat it can proce
9ca0: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  ed..  **.  ** Wh
9cb0: 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f  en X.pBlockingCo
9cc0: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
9cd0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d  t means that som
9ce0: 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72  ething that X tr
9cf0: 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74  ied.  ** tried t
9d00: 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61  o do recently fa
9d10: 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c  iled with an SQL
9d20: 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72  ITE_LOCKED error
9d30: 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20   due to locks.  
9d40: 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20  ** held by Y..  
9d50: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42  */.  sqlite3 *pB
9d60: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
9d70: 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e  n; /* Connection
9d80: 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c   that caused SQL
9d90: 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20  ITE_LOCKED */.  
9da0: 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b  sqlite3 *pUnlock
9db0: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20  Connection;     
9dc0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9dd0: 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72  ion to watch for
9de0: 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69   unlock */.  voi
9df0: 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20  d *pUnlockArg;  
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e10: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
9e20: 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20  o xUnlockNotify 
9e30: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c  */.  void (*xUnl
9e40: 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20  ockNotify)(void 
9e50: 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e  **, int);  /* Un
9e60: 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c  lock notify call
9e70: 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  back */.  sqlite
9e80: 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b  3 *pNextBlocked;
9e90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
9ea0: 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62  in list of all b
9eb0: 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f  locked connectio
9ec0: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
9ed0: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74  ./*.** A macro t
9ee0: 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65  o discover the e
9ef0: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74  ncoding of a dat
9f00: 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abase..*/.#defin
9f10: 65 20 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  e ENC(db) ((db)-
9f20: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
9f30: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
9f40: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
9f50: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
9f60: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
9f70: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
9f80: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
9f90: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
9fa0: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
9fb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9fc0: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
9fd0: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
9fe0: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
9ff0: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
a000: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a010: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
a020: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
a030: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
a040: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
a050: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a060: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
a070: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
a080: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
a090: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
a0a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
a0b0: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
a0c0: 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74  0000010  /* OK t
a0d0: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
a0e0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
a0f0: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
a100: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
a110: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
a120: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
a130: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
a140: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
a150: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
a160: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
a170: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
a180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a190: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
a1a0: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
a1b0: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
a1c0: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
a200: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
a210: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a240: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
a250: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
a260: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
a270: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
a280: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
a290: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
a2a0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
a2b0: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
a2f0: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
a300: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a310: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
a320: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
a330: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
a340: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
a350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a360: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
a370: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
a380: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
a390: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
a3a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a3b0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
a3c0: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
a3d0: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
a3e0: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
a3f0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
a400: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
a410: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
a420: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
a430: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
a440: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
a450: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
a460: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
a470: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
a480: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
a490: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
a4a0: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
a4b0: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
a4c0: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
a4d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a4e0: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
a4f0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
a500: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
a510: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
a520: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a530: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
a540: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
a550: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
a560: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
a570: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
a580: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
a590: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
a5a0: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
a5b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a5c0: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
a5d0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
a5e0: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
a5f0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
a600: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
a610: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
a620: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
a630: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a640: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
a650: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
a660: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
a670: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
a680: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
a690: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
a6a0: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
a6b0: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
a6c0: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
a6d0: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
a6e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a6f0: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
a700: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
a710: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
a720: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
a730: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
a740: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
a750: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
a760: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
a770: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a780: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
a790: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
a7a0: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
a7b0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
a7c0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
a7d0: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
a7e0: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
a7f0: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
a800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a810: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
a820: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
a830: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
a840: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a  ERY PLAN */.../*
a850: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
a860: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
a870: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
a880: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
a890: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
a8a0: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
a8b0: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
a8c0: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
a8d0: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
a8e0: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
a8f0: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
a900: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
a910: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
a920: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
a930: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
a940: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
a950: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
a960: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
a970: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
a980: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
a990: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
a9a0: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
a9b0: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
a9c0: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
a9d0: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
a9e0: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
a9f0: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
aa00: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
aa10: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
aa20: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
aa30: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
aa40: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
aa50: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
aa60: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
aa70: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
aa80: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
aa90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
aaa0: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
aab0: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
aac0: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
aad0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aae0: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
aaf0: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
ab00: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
ab10: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
ab20: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
ab30: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
ab40: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
ab50: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
ab60: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
ab70: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
ab80: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
ab90: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
aba0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
abb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
abc0: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
abd0: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
abe0: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
abf0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ac00: 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20 20 20  LITE_Stat3      
ac10: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
ac20: 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53  Use the SQLITE_S
ac30: 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64  TAT3 table */.#d
ac40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 64 6a  efine SQLITE_Adj
ac50: 75 73 74 4f 75 74 45 73 74 20 20 20 30 78 31 30  ustOutEst   0x10
ac60: 30 30 20 20 20 2f 2a 20 41 64 6a 75 73 74 20 6f  00   /* Adjust o
ac70: 75 74 70 75 74 20 65 73 74 69 6d 61 74 65 73 20  utput estimates 
ac80: 75 73 69 6e 67 20 57 48 45 52 45 20 2a 2f 0a 23  using WHERE */.#
ac90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
aca0: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
acb0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
acc0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
acd0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
ace0: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
acf0: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
ad00: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
ad10: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
ad20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ad30: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
ad40: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
ad50: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
ad60: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
ad70: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
ad80: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
ad90: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
ada0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
adb0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
adc0: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
add0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
ade0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
adf0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
ae00: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
ae10: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
ae20: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
ae30: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
ae40: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
ae50: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
ae60: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
ae70: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
ae80: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
ae90: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
aea0: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
aeb0: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
aec0: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
aed0: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
aee0: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
aef0: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
af00: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
af10: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
af20: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
af30: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
af40: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
af50: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
af60: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
af70: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
af80: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
af90: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
afa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
afb0: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
afc0: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
afd0: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
afe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
aff0: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
b000: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
b010: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
b020: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b030: 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
b040: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
b050: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
b060: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
b070: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
b080: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
b090: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
b0a0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
b0b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b0c0: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
b0d0: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
b0e0: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
b0f0: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
b100: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b110: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
b120: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
b130: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
b140: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
b150: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
b160: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
b170: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
b180: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
b190: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
b1a0: 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72  ture.  A pointer
b1b0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
b1c0: 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  re is stored in 
b1d0: 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63  the sqlite.aFunc
b1e0: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20  .** hash table. 
b1f0: 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66   When multiple f
b200: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68  unctions have th
b210: 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65  e same name, the
b220: 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70   hash table.** p
b230: 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65  oints to a linke
b240: 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20  d list of these 
b250: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73  structures..*/.s
b260: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a  truct FuncDef {.
b270: 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20    i16 nArg;     
b280: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b290: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
b2a0: 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74  -1 means unlimit
b2b0: 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63  ed */.  u16 func
b2c0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
b2d0: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
b2e0: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
b2f0: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
b300: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
b310: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
b320: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
b330: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
b340: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
b350: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
b360: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
b370: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
b380: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
b390: 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61  ue**); /* Regula
b3a0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
b3b0: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
b3c0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
b3d0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
b3e0: 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74  **); /* Aggregat
b3f0: 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  e step */.  void
b400: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
b410: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e  /* Aggregate fin
b440: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72  alizer */.  char
b450: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
b460: 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20   /* SQL name of 
b470: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f  the function. */
b480: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73  .  FuncDef *pHas
b490: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
b4a0: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
b4b0: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
b4c0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e  me hash */.  Fun
b4d0: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
b4e0: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
b4f0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
b500: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
b510: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
b520: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
b530: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
b540: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
b550: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
b560: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
b570: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
b580: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
b590: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
b5a0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
b5b0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
b5c0: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
b5d0: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
b5e0: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
b5f0: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
b600: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
b610: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
b620: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
b630: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
b640: 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   to .** the numb
b650: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
b660: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
b670: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
b680: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
b690: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
b6a0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
b6b0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
b6c0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
b6d0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
b6e0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
b6f0: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
b700: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
b710: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
b720: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
b730: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
b740: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
b750: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
b760: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
b770: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
b780: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
b790: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
b7a0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
b7b0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
b7c0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
b7d0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
b7e0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
b7f0: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
b800: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
b810: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
b820: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
b830: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
b840: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
b850: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
b860: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
b870: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
b880: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
b890: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
b8a0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
b8b0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
b8c0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
b8d0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
b8e0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
b8f0: 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  G.  There.** are
b900: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
b910: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
b920: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
b930: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b940: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
b950: 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45   0x003 /* SQLITE
b960: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
b970: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
b980: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b990: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
b9a0: 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64   0x004 /* Candid
b9b0: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
b9c0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
b9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9e0: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
b9f0: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
ba00: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
ba10: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
ba20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ba30: 45 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f  EPHEM    0x010 /
ba40: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
ba50: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
ba60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ba70: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
ba80: 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47  x020 /* sqlite3G
ba90: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
baa0: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20  might be called 
bab0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bac0: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
bad0: 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x040 /* Built-i
bae0: 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74  n length() funct
baf0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
bb00: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
bb10: 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69  F   0x080 /* Bui
bb20: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
bb30: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
bb40: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
bb50: 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a  OUNT    0x100 /*
bb60: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
bb70: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
bb80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
bb90: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32  UNC_COALESCE 0x2
bba0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
bbb0: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
bbc0: 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ull() */.#define
bbd0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c   SQLITE_FUNC_UNL
bbe0: 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42  IKELY 0x400 /* B
bbf0: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
bc00: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
bc10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
bc20: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30  NC_CONSTANT 0x80
bc30: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
bc40: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
bc50: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 0a  tant output */..
bc60: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
bc70: 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73  ing three macros
bc80: 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49  , FUNCTION(), LI
bc90: 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47  KEFUNC() and AGG
bca0: 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20  REGATE() are.** 
bcb0: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
bcc0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20  he initializers 
bcd0: 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20  for the FuncDef 
bce0: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a  structures..**.*
bcf0: 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  *   FUNCTION(zNa
bd00: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
bd10: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
bd20: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
bd30: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
bd40: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
bd50: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
bd60: 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65  me .**     imple
bd70: 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63  mented by C func
bd80: 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20  tion xFunc that 
bd90: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
bda0: 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20  uments. The.**  
bdb0: 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20     value passed 
bdc0: 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20  as iArg is cast 
bdd0: 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64  to a (void*) and
bde0: 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a   made available.
bdf0: 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73  **     as the us
be00: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
be10: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f  _user_data()) fo
be20: 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  r the function. 
be30: 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d  If .**     argum
be40: 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c  ent bNC is true,
be50: 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   then the SQLITE
be60: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66  _FUNC_NEEDCOLL f
be70: 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a  lag is set..**.*
be80: 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   VFUNCTION(zN
be90: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
bea0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
beb0: 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f      Like FUNCTIO
bec0: 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74  N except it omit
bed0: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
bee0: 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e  C_CONSTANT flag.
bef0: 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
bf00: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
bf10: 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
bf20: 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
bf30: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
bf40: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
bf50: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
bf60: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
bf70: 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
bf80: 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
bf90: 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
bfa0: 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
bfb0: 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
bfc0: 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
bfd0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
bfe0: 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
bff0: 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
c000: 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
c010: 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
c020: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
c030: 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
c040: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
c050: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
c060: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
c070: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
c080: 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
c090: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
c0a0: 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
c0b0: 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
c0c0: 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69  C .**     functi
c0d0: 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67  on likeFunc. Arg
c0e0: 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61  ument pArg is ca
c0f0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29  st to a (void *)
c100: 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20   and made.**    
c110: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68   available as th
c120: 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d  e function user-
c130: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
c140: 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a  er_data()). The.
c150: 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66  **     FuncDef.f
c160: 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73  lags variable is
c170: 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
c180: 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  e passed as the 
c190: 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72  flags.**     par
c1a0: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  ameter..*/.#defi
c1b0: 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  ne FUNCTION(zNam
c1c0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
c1d0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
c1e0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
c1f0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
c200: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
c210: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
c220: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
c230: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
c240: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
c250: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
c260: 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e  define VFUNCTION
c270: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
c280: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
c290: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
c2a0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
c2b0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
c2c0: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
c2d0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
c2e0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
c2f0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
c300: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
c310: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
c320: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
c330: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
c340: 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
c350: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
c360: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
c370: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
c380: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
c390: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c3a0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c3b0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c3c0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c3d0: 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
c3e0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
c3f0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
c400: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
c410: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
c420: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
c430: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
c440: 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  LL), \.   pArg, 
c450: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
c460: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
c470: 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
c480: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
c490: 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
c4a0: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
c4b0: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
c4c0: 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20  TF8|flags, \.   
c4d0: 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20  (void *)arg, 0, 
c4e0: 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20  likeFunc, 0, 0, 
c4f0: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
c500: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
c510: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
c520: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
c530: 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  nal) \.  {nArg, 
c540: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
c550: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
c560: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
c570: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
c580: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
c590: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
c5a0: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
c5b0: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
c5c0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
c5d0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
c5e0: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
c5f0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
c600: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
c610: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
c620: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
c630: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
c640: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
c650: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
c660: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
c670: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
c680: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
c690: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
c6a0: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
c6b0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6d0: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
c6e0: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
c6f0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
c700: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
c710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c720: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
c730: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
c740: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
c750: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
c760: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c770: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
c780: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
c790: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c7b0: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
c7c0: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
c7d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
c7e0: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
c7f0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
c800: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
c810: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
c820: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
c830: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
c840: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
c850: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
c860: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
c870: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
c880: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
c890: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
c8a0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
c8b0: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
c8c0: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
c8d0: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
c8e0: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
c8f0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
c900: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
c910: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
c920: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
c930: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
c940: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
c950: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
c960: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
c970: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
c980: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
c990: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
c9a0: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
c9b0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c9d0: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
c9e0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
c9f0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
ca20: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
ca30: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ca40: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
ca50: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
ca60: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
ca70: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
ca80: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
ca90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
caa0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
cab0: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
cac0: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
cad0: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
cae0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
caf0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
cb00: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
cb10: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
cb20: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
cb30: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
cb40: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
cb50: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
cb60: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
cb70: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
cb80: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
cb90: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
cba0: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
cbb0: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
cbc0: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
cbd0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
cbe0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
cbf0: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
cc00: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
cc10: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
cc20: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
cc30: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
cc40: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
cc50: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
cc60: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
cc70: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
cc80: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
cc90: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
cca0: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
ccb0: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
ccc0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20  f this column.  
ccd0: 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  INT==1 */.  u8 c
cce0: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
ccf0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
cd00: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
cd10: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
cd20: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
cd30: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
cd40: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
cd50: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
cd60: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
cd70: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
cd80: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
cd90: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
cda0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
cdb0: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
cdc0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
cdd0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
cde0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
cdf0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
ce00: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
ce10: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
ce20: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
ce30: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
ce40: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
ce50: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ce60: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
ce70: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
ce80: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
ce90: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
cea0: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
ceb0: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
cec0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
ced0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
cee0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
cef0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
cf00: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
cf10: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
cf20: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
cf30: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
cf40: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
cf50: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
cf60: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
cf70: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
cf80: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
cf90: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
cfa0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
cfb0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
cfc0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
cfd0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
cfe0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
cff0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
d000: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
d010: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
d020: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
d030: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
d040: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
d050: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
d060: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
d070: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
d080: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
d090: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
d0a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
d0b0: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
d0c0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
d0d0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
d0e0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
d0f0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
d100: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
d110: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d120: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
d130: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
d140: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
d150: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
d160: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
d170: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
d180: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
d190: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
d1a0: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
d1b0: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
d1c0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
d1d0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
d1e0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
d1f0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
d200: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
d210: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
d220: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
d230: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
d240: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
d250: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
d260: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
d270: 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61  n with 'a'.  Tha
d280: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
d290: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
d2a0: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
d2b0: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
d2c0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
d2d0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
d2e0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
d2f0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
d300: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
d310: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
d320: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
d330: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
d340: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
d350: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
d360: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
d370: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64  omparison..*/.#d
d380: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
d390: 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64  _TEXT     'a'.#d
d3a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
d3b0: 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64  _NONE     'b'.#d
d3c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
d3d0: 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64  _NUMERIC  'c'.#d
d3e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
d3f0: 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64  _INTEGER  'd'.#d
d400: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
d410: 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23  _REAL     'e'..#
d420: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
d430: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
d440: 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
d450: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
d460: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
d470: 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
d480: 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
d490: 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
d4a0: 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
d4b0: 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66   value. .*/.#def
d4c0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
d4d0: 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a  ASK     0x67../*
d4e0: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
d4f0: 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
d500: 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
d510: 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
d520: 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
d530: 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
d540: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
d550: 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
d560: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
d570: 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
d580: 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
d590: 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
d5a0: 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
d5b0: 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
d5c0: 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
d5d0: 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
d5e0: 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
d5f0: 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
d600: 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
d610: 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
d620: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
d630: 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
d640: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d650: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
d660: 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  08  /* jumps if 
d670: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
d680: 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
d690: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
d6a0: 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53        0x10  /* S
d6b0: 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
d6c0: 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
d6d0: 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
d6e0: 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
d6f0: 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
d700: 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
d710: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
d720: 55 4c 4c 20 20 20 20 20 20 30 78 38 38 20 20 2f  ULL      0x88  /
d730: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
d740: 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
d750: 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
d760: 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
d770: 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
d780: 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
d790: 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
d7a0: 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
d7b0: 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a  ase schema. .**.
d7c0: 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
d7d0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
d7e0: 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
d7f0: 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
d800: 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
d810: 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
d820: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
d830: 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
d840: 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
d850: 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
d860: 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
d870: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
d880: 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
d890: 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
d8a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
d8b0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
d8c0: 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
d8d0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
d8e0: 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65   table .** imple
d8f0: 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
d900: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
d910: 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
d920: 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64  ed between .** d
d930: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d940: 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
d950: 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
d960: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
d970: 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  e .** schema is 
d980: 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
d990: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
d9a0: 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
d9b0: 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
d9c0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
d9d0: 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
d9e0: 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
d9f0: 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
da00: 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
da10: 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
da20: 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
da30: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
da40: 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
da50: 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
da60: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
da70: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
da80: 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
da90: 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74  les .** within t
daa0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
dab0: 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
dac0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
dad0: 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e  callers .** tran
dae0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61  saction, these a
daf0: 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20  ccesses need to 
db00: 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20  be made via the 
db10: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a  same database .*
db20: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20  * connection as 
db30: 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65  that used to exe
db40: 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69  cute SQL operati
db50: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75  ons on the virtu
db60: 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  al table..**.** 
db70: 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  All VTable objec
db80: 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ts that correspo
db90: 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74  nd to a single t
dba0: 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64  able in a shared
dbb0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68  .** database sch
dbc0: 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c  ema are initiall
dbd0: 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  y stored in a li
dbe0: 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65  nked-list pointe
dbf0: 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54  d to by.** the T
dc00: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d  able.pVTable mem
dc10: 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20  ber variable of 
dc20: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
dc30: 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a  g Table object..
dc40: 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74  ** When an sqlit
dc50: 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65  e3_prepare() ope
dc60: 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  ration is requir
dc70: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
dc80: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
dc90: 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74  e, it searches t
dca0: 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20  he list for the 
dcb0: 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72  VTable that corr
dcc0: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a  esponds to the.*
dcd0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
dce0: 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20  ction doing the 
dcf0: 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20  preparing so as 
dd00: 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65  to use the corre
dd10: 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74  ct.** sqlite3_vt
dd20: 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68  ab* handle in th
dd30: 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
dd40: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ..**.** When an 
dd50: 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20  in-memory Table 
dd60: 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65  object is delete
dd70: 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77  d (for example w
dd80: 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d  hen the.** schem
dd90: 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61  a is being reloa
dda0: 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61  ded for some rea
ddb0: 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65  son), the VTable
ddc0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74   objects are not
ddd0: 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64   .** deleted and
dde0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
ddf0: 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
de00: 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
de10: 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ed .** immediate
de20: 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
de30: 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
de40: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
de50: 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
de60: 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
de70: 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
de80: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
de90: 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
dea0: 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
deb0: 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
dec0: 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
ded0: 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
dee0: 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65  connected .** ne
def0: 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
df00: 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
df10: 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
df20: 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
df30: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
df40: 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
df50: 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
df60: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
df70: 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
df80: 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
df90: 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
dfa0: 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
dfb0: 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
dfc0: 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
dfd0: 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
dfe0: 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
dff0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
e000: 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
e010: 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
e020: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
e030: 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
e040: 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
e050: 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
e060: 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
e070: 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
e080: 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c  cated by .** sql
e090: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
e0a0: 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
e0b0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
e0c0: 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
e0d0: 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  as .** the first
e0e0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
e0f0: 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
e100: 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
e110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
e120: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e130: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
e140: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
e150: 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
e160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
e170: 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
e180: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
e190: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
e1a0: 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
e1b0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
e1c0: 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
e1d0: 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
e1e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
e1f0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
e200: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
e210: 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
e220: 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
e230: 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
e240: 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
e250: 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
e260: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
e270: 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
e280: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
e290: 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
e2a0: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
e2b0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
e2c0: 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
e2d0: 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
e2e0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c  ** Each SQL tabl
e2f0: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
e300: 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
e310: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e320: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  .** following st
e330: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
e340: 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68  able.zName is th
e350: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
e360: 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f  ble.  The case o
e370: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a  f the original.*
e380: 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  * CREATE TABLE s
e390: 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72  tatement is stor
e3a0: 65 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20  ed, but case is 
e3b0: 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20  not significant 
e3c0: 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  for.** compariso
e3d0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  ns..**.** Table.
e3e0: 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62  nCol is the numb
e3f0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
e400: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61   this table.  Ta
e410: 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a  ble.aCol is a.**
e420: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61   pointer to an a
e430: 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73  rray of Column s
e440: 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66  tructures, one f
e450: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  or each column..
e460: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  **.** If the tab
e470: 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45  le has an INTEGE
e480: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74  R PRIMARY KEY, t
e490: 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  hen Table.iPKey 
e4a0: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a  is the index of.
e4b0: 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68  ** the column th
e4c0: 61 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20  at is that key. 
e4d0: 20 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c    Otherwise Tabl
e4e0: 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74  e.iPKey is negat
e4f0: 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68  ive.  Note.** th
e500: 61 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20  at the datatype 
e510: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
e520: 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47  EY must be INTEG
e530: 45 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c  ER for this fiel
e540: 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20  d to.** be set. 
e550: 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   An INTEGER PRIM
e560: 41 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20  ARY KEY is used 
e570: 61 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  as the rowid for
e580: 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20   each row of.** 
e590: 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61  the table.  If a
e5a0: 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e   table has no IN
e5b0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
e5c0: 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d  Y, then a random
e5d0: 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e   rowid.** is gen
e5e0: 65 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  erated for each 
e5f0: 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65  row of the table
e600: 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  .  TF_HasPrimary
e610: 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a  Key is set if.**
e620: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
e630: 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ny PRIMARY KEY, 
e640: 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72  INTEGER or other
e650: 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  wise..**.** Tabl
e660: 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61  e.tnum is the pa
e670: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
e680: 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67  e root BTree pag
e690: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
e6a0: 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  n the.** databas
e6b0: 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c  e file.  If Tabl
e6c0: 65 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64  e.iDb is the ind
e6d0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
e6e0: 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64  se table backend
e6f0: 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44  .** in sqlite.aD
e700: 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74  b[].  0 is for t
e710: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e720: 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68   and 1 is for th
e730: 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68  e file that.** h
e740: 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74  olds temporary t
e750: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
e760: 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65  s.  If TF_Epheme
e770: 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68  ral is set.** th
e780: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
e790: 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65  stored in a file
e7a0: 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74   that is automat
e7b0: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a  ically deleted.*
e7c0: 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  * when the VDBE 
e7d0: 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61  cursor to the ta
e7e0: 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20  ble is closed.  
e7f0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62  In this case Tab
e800: 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65  le.tnum .** refe
e810: 72 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  rs VDBE cursor n
e820: 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73  umber that holds
e830: 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c   the table open,
e840: 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74   not to the root
e850: 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  .** page number.
e860: 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c    Transient tabl
e870: 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68  es are used to h
e880: 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20  old the results 
e890: 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72  of a.** sub-quer
e8a0: 79 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69  y that appears i
e8b0: 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c  nstead of a real
e8c0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74   table name in t
e8d0: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a  he FROM clause .
e8e0: 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ** of a SELECT s
e8f0: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
e900: 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
e910: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
e920: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
e930: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
e940: 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
e950: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
e960: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
e970: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
e980: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
e990: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
e9a0: 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
e9b0: 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
e9c0: 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
e9d0: 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
e9e0: 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
e9f0: 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
ea00: 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
ea10: 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
ea20: 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
ea30: 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
ea40: 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
ea50: 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
ea60: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
ea70: 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
ea80: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
ea90: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
eaa0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
eab0: 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70  OMIT_CHECK.  Exp
eac0: 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20  rList *pCheck;  
ead0: 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63    /* All CHECK c
eae0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65  onstraints */.#e
eaf0: 6e 64 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52  ndif.  LogEst nR
eb00: 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
eb10: 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
eb20: 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
eb30: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
eb40: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
eb50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
eb60: 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f  ot BTree node fo
eb70: 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65  r this table (se
eb80: 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f  e note above) */
eb90: 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
eba0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
ebb0: 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
ebc0: 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
ebd0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
ebe0: 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
ebf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ec00: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
ec10: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
ec20: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
ec30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ec40: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
ec50: 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c  his Table */.  L
ec60: 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
ec70: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
ec80: 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
ec90: 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
eca0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
ecb0: 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
ecc0: 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
ecd0: 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
ece0: 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
ecf0: 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
ed00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
ed10: 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
ed20: 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
ed30: 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
ed40: 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
ed50: 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
ed60: 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
ed70: 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
ed80: 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
ed90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
eda0: 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
edb0: 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
edc0: 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
edd0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
ede0: 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
edf0: 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
ee00: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ee10: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
ee20: 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
ee30: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
ee40: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
ee50: 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
ee60: 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
ee70: 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66  Arg;  /* Text of
ee80: 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73   all module args
ee90: 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20  . [0] is module 
eea0: 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  name */.  VTable
eeb0: 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
eec0: 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
eed0: 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
eee0: 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
eef0: 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
ef00: 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
ef10: 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
ef20: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
ef30: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
ef40: 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
ef50: 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
ef60: 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
ef70: 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
ef80: 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
ef90: 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
efa0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
efb0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
efc0: 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a  le.tabFlags..*/.
efd0: 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
efe0: 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20  nly        0x01 
eff0: 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
f000: 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
f010: 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
f020: 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20  eral       0x02 
f030: 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
f040: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
f050: 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
f060: 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f  yKey   0x04    /
f070: 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
f080: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
f090: 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
f0a0: 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20  ement   0x08    
f0b0: 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
f0c0: 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
f0d0: 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
f0e0: 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20  ne TF_Virtual   
f0f0: 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
f100: 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   Is a virtual ta
f110: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
f120: 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20  F_WithoutRowid  
f130: 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20    0x20    /* No 
f140: 72 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d  rowid used. PRIM
f150: 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
f160: 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ey */.../*.** Te
f170: 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
f180: 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
f190: 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
f1a0: 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
f1b0: 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
f1c0: 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
f1d0: 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
f1e0: 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
f1f0: 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
f200: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
f210: 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
f220: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f230: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
f240: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
f250: 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
f260: 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
f270: 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20  Virtual)!=0).#  
f280: 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
f290: 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
f2a0: 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
f2b0: 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
f2c0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
f2d0: 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
f2e0: 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48   0.#  define IsH
f2f0: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
f300: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73  .#endif../* Does
f310: 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
f320: 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
f330: 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
f340: 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
f350: 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
f360: 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
f370: 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
f380: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
f390: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
f3a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
f3b0: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
f3c0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
f3d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f3e0: 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
f3f0: 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
f400: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
f410: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
f420: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
f430: 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
f440: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
f450: 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
f460: 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
f470: 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
f480: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
f490: 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
f4a0: 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
f4b0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
f4c0: 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
f4d0: 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
f4e0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
f4f0: 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
f500: 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
f510: 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
f520: 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
f530: 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
f540: 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
f550: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
f560: 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
f570: 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
f580: 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
f590: 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
f5a0: 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
f5b0: 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
f5c0: 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
f5d0: 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
f5e0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
f5f0: 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
f600: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f610: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
f620: 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
f630: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
f640: 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
f650: 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
f660: 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
f670: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
f680: 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
f690: 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
f6a0: 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
f6b0: 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
f6c0: 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
f6d0: 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
f6e0: 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
f6f0: 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
f700: 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
f710: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
f720: 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
f730: 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
f740: 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
f750: 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
f760: 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
f770: 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
f780: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
f790: 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
f7a0: 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
f7b0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
f7c0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
f7d0: 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
f7e0: 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
f7f0: 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
f800: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
f810: 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
f820: 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
f830: 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
f840: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
f850: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
f860: 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
f870: 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
f880: 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
f890: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
f8a0: 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
f8b0: 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
f8c0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
f8d0: 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
f8e0: 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
f8f0: 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
f900: 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
f910: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f920: 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
f930: 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
f940: 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
f950: 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
f960: 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
f970: 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
f980: 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
f990: 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
f9a0: 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
f9b0: 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
f9c0: 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
f9d0: 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
f9e0: 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
f9f0: 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
fa00: 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
fa10: 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
fa20: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
fa30: 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
fa40: 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
fa50: 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
fa60: 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
fa70: 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
fa80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
fa90: 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
faa0: 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
fab0: 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
fac0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
fad0: 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
fae0: 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
faf0: 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
fb00: 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
fb10: 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
fb20: 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
fb30: 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
fb40: 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
fb50: 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
fb60: 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
fb70: 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
fb80: 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
fb90: 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
fba0: 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
fbb0: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
fbc0: 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
fbd0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
fbe0: 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
fbf0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
fc00: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
fc10: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
fc20: 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
fc30: 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
fc40: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
fc50: 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
fc60: 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
fc70: 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
fc80: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
fc90: 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
fca0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
fcb0: 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
fcc0: 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
fcd0: 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
fce0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
fcf0: 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
fd00: 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
fd10: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
fd20: 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
fd30: 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
fd40: 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
fd50: 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
fd60: 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
fd70: 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
fd80: 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
fd90: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
fda0: 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
fdb0: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
fdc0: 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
fdd0: 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
fde0: 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
fdf0: 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
fe00: 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
fe10: 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
fe20: 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
fe30: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
fe40: 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
fe50: 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
fe60: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
fe70: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
fe80: 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
fe90: 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
fea0: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
feb0: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
fec0: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
fed0: 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
fee0: 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
fef0: 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
ff00: 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
ff10: 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
ff20: 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
ff30: 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
ff40: 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
ff50: 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
ff60: 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
ff70: 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
ff80: 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
ff90: 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
ffa0: 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
ffb0: 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
ffc0: 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
ffd0: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
ffe0: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
fff0: 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
10000 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
10010 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
10020 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
10030 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
10040 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20  ign key..** .** 
10050 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
10060 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72  mbolic values ar
10070 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64  e used to record
10080 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f   which type.** o
10090 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65  f action to take
100a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  ..*/.#define OE_
100b0 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20  None     0   /* 
100c0 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  There is no cons
100d0 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20  traint to check 
100e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f  */.#define OE_Ro
100f0 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61  llback 1   /* Fa
10100 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  il the operation
10110 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68   and rollback th
10120 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  e transaction */
10130 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72  .#define OE_Abor
10140 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b  t    2   /* Back
10150 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74   out changes but
10160 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20   do no rollback 
10170 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
10180 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20  define OE_Fail  
10190 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74     3   /* Stop t
101a0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  he operation but
101b0 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72   leave all prior
101c0 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
101d0 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20  ine OE_Ignore   
101e0 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68  4   /* Ignore th
101f0 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20  e error. Do not 
10200 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72  do the INSERT or
10210 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
10220 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35  ne OE_Replace  5
10230 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69     /* Delete exi
10240 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68  sting record, th
10250 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20  en do INSERT or 
10260 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69  UPDATE */..#defi
10270 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36  ne OE_Restrict 6
10280 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
10290 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
102a0 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
102b0 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
102c0 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20  e OE_SetNull  7 
102d0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
102e0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
102f0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
10300 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20  e OE_SetDflt  8 
10310 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
10320 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
10330 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
10340 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
10350 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63  ade  9   /* Casc
10360 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
10370 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44  */..#define OE_D
10380 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44  efault  10  /* D
10390 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64  o whatever the d
103a0 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73  efault action is
103b0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69   */.../*.** An i
103c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
103d0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
103e0 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20  re is passed as 
103f0 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
10400 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
10410 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61  VdbeKeyCompare a
10420 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  nd is used to co
10430 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f  ntrol the .** co
10440 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
10450 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
10460 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
10470 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
10480 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
10490 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
104a0 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
104b0 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
104c0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
104d0 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
104e0 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
104f0 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
10500 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
10510 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
10520 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
10530 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
10540 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
10550 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
10560 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
10570 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
10580 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
10590 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
105a0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
105b0 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
105c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
105d0 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
105e0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
105f0 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20   nXField;       
10600 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
10610 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65  lumns beyond the
10620 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   key columns */.
10630 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
10640 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
10650 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10660 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
10670 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
10680 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
10690 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
106a0 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
106b0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
106c0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
106d0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
106e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
106f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
10700 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
10710 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
10720 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
10730 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
10740 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
10750 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
10760 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
10770 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
10780 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
10790 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
107a0 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
107b0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
107c0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
107d0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
107e0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
107f0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
10800 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
10810 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
10820 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
10830 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
10840 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
10850 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
10860 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
10870 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
10880 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
10890 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
108a0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
108b0 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
108c0 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
108d0 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
108e0 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
108f0 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
10900 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
10910 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
10920 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  r2 member variab
10930 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
10940 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a  d by the optimiz
10950 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a  ed comparison.**
10960 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52   functions vdbeR
10970 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28  ecordCompareInt(
10980 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64  ) and vdbeRecord
10990 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e  CompareString().
109a0 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
109b0 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
109c0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
109d0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
109e0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
109f0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75  formation */.  u
10a00 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
10a10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10a20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d  entries in apMem
10a30 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75  [] */.  i8 defau
10a40 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43  lt_rc;      /* C
10a50 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
10a60 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75   if keys are equ
10a70 61 6c 20 2a 2f 0a 20 20 75 38 20 69 73 43 6f 72  al */.  u8 isCor
10a80 72 75 70 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  rupt;       /* C
10a90 6f 72 72 75 70 74 69 6f 6e 20 64 65 74 65 63 74  orruption detect
10aa0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
10ab0 70 61 72 65 28 29 20 2a 2f 0a 20 20 4d 65 6d 20  pare() */.  Mem 
10ac0 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
10ad0 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69  /* Values */.  i
10ae0 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  nt r1;          
10af0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
10b00 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
10b10 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32  rhs) */.  int r2
10b20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10b30 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
10b40 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
10b50 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
10b60 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
10b70 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
10b80 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
10b90 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
10ba0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
10bb0 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
10bc0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
10bd0 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
10be0 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
10bf0 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
10c00 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
10c10 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
10c20 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
10c30 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
10c40 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
10c50 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
10c60 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
10c70 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
10c80 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
10c90 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
10ca0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
10cb0 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
10cc0 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
10cd0 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
10ce0 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
10cf0 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
10d00 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
10d10 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10d20 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
10d30 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
10d40 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
10d50 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
10d60 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
10d70 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
10d80 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
10d90 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
10da0 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
10db0 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
10dc0 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
10dd0 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
10de0 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
10df0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
10e00 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
10e10 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
10e20 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
10e30 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
10e40 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
10e50 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
10e60 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
10e70 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
10e80 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
10e90 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
10ea0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
10eb0 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
10ec0 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
10ed0 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
10ee0 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
10ef0 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
10f00 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
10f10 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
10f20 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
10f30 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
10f40 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
10f50 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
10f60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
10f70 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
10f80 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
10f90 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
10fa0 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
10fb0 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
10fc0 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
10fd0 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
10fe0 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
10ff0 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  element..*/.stru
11000 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
11010 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11020 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11030 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
11040 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
11050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11060 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
11070 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
11080 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
11090 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
110a0 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
110b0 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
110c0 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
110d0 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
110e0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
110f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11100 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
11110 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
11120 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
11130 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
11140 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
11150 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
11160 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11170 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
11180 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
11190 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
111a0 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
111b0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
111c0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
111d0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
111e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
111f0 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
11200 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
11210 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
11220 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
11230 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
11240 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  .  char **azColl
11250 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
11260 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
11270 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
11280 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
11290 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
112a0 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
112b0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
112c0 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
112d0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
112e0 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20  nfo;       /* A 
112f0 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73  KeyInfo object s
11300 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  uitable for this
11310 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
11320 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
11330 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
11340 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
11350 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
11360 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
11370 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
11380 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
11390 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
113a0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
113b0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
113c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
113d0 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
113e0 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
113f0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11400 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11410 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
11420 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
11430 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
11440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
11450 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
11460 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
11470 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
11480 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
11490 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
114a0 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
114b0 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
114c0 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
114d0 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
114e0 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
114f0 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
11500 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
11510 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
11520 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
11530 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
11540 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
11550 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
11560 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
11570 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
11580 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
11590 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
115a0 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
115b0 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
115c0 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
115d0 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
115e0 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23  ering index */.#
115f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
11600 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
11610 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
11620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11630 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
11640 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
11650 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
11660 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
11670 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
11680 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
11690 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
116a0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
116b0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
116c0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
116d0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
116e0 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
116f0 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
11700 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
11710 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
11720 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
11730 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
11740 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
11750 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
11760 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
11770 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
11780 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
11790 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
117a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
117b0 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
117c0 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
117d0 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
117e0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
117f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
11800 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
11810 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
11820 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
11830 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
11840 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
11850 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
11860 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
11870 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
11880 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
11890 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
118a0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
118b0 41 52 59 4b 45 59 29 0a 0a 2f 2a 0a 2a 2a 20 45  ARYKEY)../*.** E
118c0 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
118d0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
118e0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
118f0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11900 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
11910 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
11920 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
11930 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
11940 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
11950 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
11960 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
11970 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
11980 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
11990 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
119a0 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
119b0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
119c0 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
119d0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
119e0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
119f0 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
11a00 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
11a10 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
11a20 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
11a30 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
11a40 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
11a50 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
11a60 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
11a70 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
11a80 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
11a90 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
11aa0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
11ab0 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
11ac0 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
11ad0 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
11ae0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
11af0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
11b00 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
11b10 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
11b20 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
11b30 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
11b40 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
11b50 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
11b60 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
11b70 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
11b80 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
11b90 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
11ba0 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
11bb0 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
11bc0 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
11bd0 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
11be0 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
11bf0 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
11c00 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
11c10 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
11c20 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
11c30 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
11c40 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
11c50 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
11c60 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
11c70 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
11c80 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
11c90 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
11ca0 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
11cb0 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
11cc0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11cd0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
11ce0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
11cf0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
11d00 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
11d10 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
11d20 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
11d30 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
11d40 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
11d50 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
11d60 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
11d70 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
11d80 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
11d90 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
11da0 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
11db0 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
11dc0 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
11dd0 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
11de0 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
11df0 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
11e00 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
11e10 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
11e20 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
11e30 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
11e40 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
11e50 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
11e60 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
11e70 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
11e80 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
11e90 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
11ea0 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
11eb0 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
11ec0 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
11ed0 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
11ee0 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
11ef0 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
11f00 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
11f10 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
11f20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
11f30 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
11f40 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
11f50 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
11f60 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
11f90 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
11fa0 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
11fb0 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
11fc0 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
11fd0 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
11fe0 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
11ff0 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
12000 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
12030 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
12040 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
12050 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
12060 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
12070 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12080 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
12090 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
120a0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
120b0 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
120c0 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
120d0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
120e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
120f0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
12100 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
12110 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
12120 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
12130 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
12140 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
12150 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
12160 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
12170 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
12180 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
12190 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
121a0 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
121b0 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
121c0 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
121d0 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
121e0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
121f0 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
12200 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
12210 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
12220 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
12230 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
12240 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
12250 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
12260 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
12270 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
12280 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
12290 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
122a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
122b0 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
122c0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
122d0 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
122e0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
122f0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
12300 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
12310 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
12320 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
12330 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
12340 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
12350 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
12360 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
12370 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
12380 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12390 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
123a0 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
123b0 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
123c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
123d0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
123e0 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
123f0 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
12420 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
12430 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
12440 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
12470 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
12480 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
12490 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
124a0 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
124b0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
124c0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
124d0 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
124e0 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
124f0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
12500 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
12510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
12520 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
12530 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
12540 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
12550 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
12560 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
12570 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
12580 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
12590 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
125a0 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
125b0 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
125c0 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
125d0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
125e0 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
125f0 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
12600 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12610 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
12620 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
12630 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
12640 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
12650 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
12660 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
12670 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
12680 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
12690 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
126a0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
126b0 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
126c0 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
126d0 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
126e0 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
126f0 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
12700 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
12710 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
12720 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
12730 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
12740 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
12750 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
12760 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
12770 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
12780 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
12790 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
127a0 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
127b0 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
127c0 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
127d0 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
127e0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
127f0 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
12800 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
12810 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
12820 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
12830 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
12840 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
12850 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
12860 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
12870 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
12880 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
12890 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
128a0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
128b0 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
128c0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
128d0 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
128e0 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
128f0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
12900 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
12910 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
12920 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
12930 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
12940 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
12950 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
12960 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
12970 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
12980 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
12990 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
129a0 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
129b0 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
129c0 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
129d0 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
129e0 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
129f0 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
12a00 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
12a10 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
12a20 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
12a30 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
12a40 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
12a50 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
12a60 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
12a70 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
12a80 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
12a90 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
12aa0 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
12ab0 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
12ac0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
12ad0 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
12ae0 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
12af0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
12b00 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
12b10 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
12b20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
12b30 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
12b40 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
12b50 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
12b60 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
12b70 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
12b80 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
12b90 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
12ba0 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
12bb0 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
12bc0 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
12bd0 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
12be0 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
12bf0 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
12c00 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
12c10 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
12c20 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
12c30 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
12c40 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
12c50 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
12c60 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
12c70 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
12c80 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
12c90 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
12ca0 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
12cb0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
12cc0 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
12cd0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
12ce0 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
12cf0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
12d00 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
12d10 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
12d20 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
12d30 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
12d40 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
12d50 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
12d60 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
12d70 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
12d80 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
12d90 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
12da0 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
12db0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
12dc0 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
12dd0 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
12de0 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
12df0 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
12e00 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
12e10 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
12e20 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
12e30 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
12e40 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
12e50 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
12e60 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
12e70 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
12e80 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
12e90 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
12ea0 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
12eb0 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
12ec0 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
12ed0 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
12ee0 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
12ef0 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
12f00 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
12f10 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
12f20 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
12f30 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
12f40 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
12f50 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
12f60 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
12f70 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
12f80 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
12f90 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
12fa0 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
12fb0 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
12fc0 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
12fd0 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
12fe0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
12ff0 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
13000 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
13010 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
13020 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
13030 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
13040 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13050 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
13060 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
13070 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
13080 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
13090 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
130a0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
130b0 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
130c0 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
130d0 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
130e0 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
130f0 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
13100 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
13110 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
13120 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
13130 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
13140 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
13150 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
13160 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
13170 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
13180 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
13190 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
131a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
131b0 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
131c0 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
131d0 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
131e0 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
131f0 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
13200 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
13210 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
13220 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
13230 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
13240 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
13250 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
13260 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
13270 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
13280 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
13290 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
132a0 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
132b0 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
132c0 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
132d0 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
132e0 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
132f0 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
13300 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
13310 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
13320 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
13330 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
13340 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
13350 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
13360 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
13370 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
13380 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
13390 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
133a0 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
133b0 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
133c0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
133d0 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
133e0 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
133f0 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
13400 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
13410 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
13420 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
13430 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
13440 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
13450 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
13460 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
13470 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
13480 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
13490 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
134a0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
134b0 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
134c0 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
134d0 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
134e0 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
134f0 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
13500 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
13510 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
13520 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
13530 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
13540 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
13550 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
13560 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
13570 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
13580 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
13590 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
135a0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
135b0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
135c0 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
135d0 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
135e0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
135f0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
13600 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
13610 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
13620 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
13630 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
13640 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
13650 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
13660 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
13670 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
13680 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
13690 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
136a0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
136b0 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
136c0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
136d0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
136e0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
136f0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
13700 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
13710 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
13720 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
13730 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
13740 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
13750 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
13760 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
13770 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
13780 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
13790 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
137a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
137e0 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
137f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
13800 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
13810 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
13820 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
13830 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
13840 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
13850 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
13860 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
13870 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
13880 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
13890 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
138a0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
138b0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
138c0 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
138d0 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
138e0 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
138f0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
13900 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
13910 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
13920 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
13930 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
13940 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
13950 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
13960 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
13970 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
13980 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
13990 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
139a0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
139b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139f0 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
13a00 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
13a10 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
13a20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
13a30 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
13a40 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
13a50 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
13a60 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
13a70 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
13a80 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
13a90 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
13aa0 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
13ad0 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
13ae0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
13af0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
13b00 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
13b10 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
13b40 6b 65 6c 79 3a 20 20 31 30 30 30 20 74 69 6d 65  kely:  1000 time
13b50 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
13b60 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
13b70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
13b80 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
13b90 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
13ba0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13bc0 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
13bd0 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
13be0 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
13bf0 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
13c00 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
13c10 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
13c20 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
13c30 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
13c40 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
13c50 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
13c60 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
13c70 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
13c80 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13ca0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
13cb0 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
13cc0 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
13cf0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
13d00 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
13d30 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
13d40 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
13d50 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
13d60 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
13d70 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
13d80 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
13d90 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
13da0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
13db0 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
13dc0 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
13dd0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
13de0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
13df0 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
13e00 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
13e10 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
13e20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
13e30 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
13e40 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
13e50 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
13e60 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
13e70 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
13e80 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
13e90 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
13ea0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
13eb0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
13ec0 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
13ed0 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49  d  0x000004 /* I
13ee0 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
13ef0 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
13f00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
13f10 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30  rror     0x00000
13f20 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20  8 /* Expression 
13f30 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
13f40 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
13f50 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
13f60 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20  ct  0x000010 /* 
13f70 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
13f80 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
13f90 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
13fa0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
13fb0 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65   0x000020 /* pSe
13fc0 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
13fd0 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
13fe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
13ff0 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34  blQuoted 0x00004
14000 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73  0 /* token.z was
14010 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
14020 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
14030 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30  EP_InfixFunc 0x0
14040 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
14050 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
14060 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
14070 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
14080 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30  EP_Collate   0x0
14090 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
140a0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
140b0 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ATE operator */.
140c0 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72  #define EP_Gener
140d0 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a  ic   0x000200 /*
140e0 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20   Ignore COLLATE 
140f0 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74  or affinity on t
14100 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66  his tree */.#def
14110 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
14120 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74   0x000400 /* Int
14130 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
14140 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
14150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
14160 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30  IsSelect 0x00080
14170 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
14180 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
14190 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
141a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
141b0 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20  p      0x001000 
141c0 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20  /* COLLATE, AS, 
141d0 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23  or UNLIKELY */.#
141e0 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
141f0 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20  d   0x002000 /* 
14200 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
14210 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
14220 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
14230 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
14240 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72  0x004000 /* Expr
14250 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b   struct EXPR_TOK
14260 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
14270 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
14280 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78   EP_Static    0x
14290 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69  008000 /* Held i
142a0 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
142b0 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
142c0 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  c() */.#define E
142d0 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31  P_MemToken  0x01
142e0 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20  0000 /* Need to 
142f0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
14300 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
14310 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75  define EP_NoRedu
14320 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20  ce  0x020000 /* 
14330 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
14340 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
14350 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e  */.#define EP_Un
14360 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30  likely  0x040000
14370 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f   /* unlikely() o
14380 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66  r likelihood() f
14390 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
143a0 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20  ne EP_Constant  
143b0 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65  0x080000 /* Node
143c0 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a   is a constant *
143d0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
143e0 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
143f0 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
14400 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
14410 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
14420 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
14430 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
14440 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
14450 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
14460 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
14470 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
14480 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
14490 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
144a0 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
144b0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
144c0 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
144d0 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
144e0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
144f0 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
14500 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
14510 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
14520 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
14530 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
14540 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
14550 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
14560 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
14570 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
14580 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
14590 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
145a0 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
145b0 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
145c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
145d0 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
145e0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
145f0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
14600 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
14610 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
14620 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
14630 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
14640 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
14650 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
14660 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
14670 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
14680 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
14690 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
146a0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
146b0 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
146c0 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
146d0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
146e0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
146f0 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
14700 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
14710 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
14720 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
14730 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
14740 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
14750 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
14760 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
14770 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
14780 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
14790 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
147a0 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
147b0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
147c0 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
147d0 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
147e0 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
147f0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
14800 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
14810 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
14820 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
14830 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
14840 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
14850 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
14860 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
14870 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
14880 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
14890 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
148a0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
148b0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
148c0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
148d0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
148e0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
148f0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
14900 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
14910 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
14920 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
14930 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
14940 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
14950 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
14960 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
14970 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
14980 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
14990 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
149a0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
149b0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
149c0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
149d0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
149e0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
149f0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
14a00 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
14a10 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
14a20 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
14a30 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
14a40 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
14a50 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
14a60 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
14a70 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
14a80 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
14a90 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
14aa0 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
14ab0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
14ac0 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
14ad0 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
14ae0 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
14af0 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
14b00 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
14b10 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
14b20 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
14b30 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
14b40 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
14b50 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
14b60 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
14b70 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
14b80 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
14b90 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
14ba0 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
14bb0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
14bc0 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
14bd0 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
14be0 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
14bf0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
14c00 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
14c10 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
14c20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14c30 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
14c40 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
14c50 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
14c60 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
14c70 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
14c80 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
14c90 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
14ca0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
14cb0 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
14cc0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
14cd0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
14ce0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
14cf0 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
14d00 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
14d10 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
14d20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
14d30 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
14d40 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
14d50 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
14d60 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
14d70 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
14d80 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
14d90 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
14da0 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
14db0 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
14dc0 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
14dd0 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
14de0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
14df0 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
14e00 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
14e10 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
14e20 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
14e30 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
14e40 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
14e50 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
14e60 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
14e70 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
14e80 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
14e90 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
14ea0 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
14eb0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
14ec0 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
14ed0 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
14ee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
14ef0 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
14f00 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
14f10 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
14f20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
14f30 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
14f40 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
14f50 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
14f60 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
14f70 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14f90 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
14fa0 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
14fb0 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
14fc0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
14fd0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
14fe0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
14ff0 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
15000 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
15010 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
15020 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
15030 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
15040 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
15050 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
15060 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
15070 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
15080 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
15090 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
150a0 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
150b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
150c0 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
150d0 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
150e0 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
150f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
15100 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
15110 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
15120 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
15130 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
15140 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15150 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
15160 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
15170 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
15180 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
15190 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
151a0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
151b0 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
151c0 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
151d0 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
151e0 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
151f0 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
15200 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
15210 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
15220 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
15230 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
15240 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
15250 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
15260 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
15270 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
15280 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
15290 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
152a0 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
152b0 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
152c0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
152d0 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
152e0 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
152f0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
15300 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
15310 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
15320 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
15330 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
15340 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
15350 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
15360 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
15370 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
15380 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
15390 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
153a0 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
153b0 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
153c0 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
153d0 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
153e0 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
153f0 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
15400 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
15410 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15420 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
15430 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
15440 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
15450 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
15460 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
15470 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
15480 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
15490 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
154a0 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
154b0 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
154c0 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
154d0 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
154e0 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
154f0 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
15500 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
15510 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
15520 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
15530 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
15540 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
15550 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
15560 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
15570 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
15580 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
15590 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
155a0 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
155b0 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
155c0 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
155d0 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d   A bit in a Bitm
155e0 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ask.*/.#define M
155f0 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42  ASKBIT(n)   (((B
15600 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a  itmask)1)<<(n)).
15610 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33  #define MASKBIT3
15620 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64  2(n) (((unsigned
15630 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f   int)1)<<(n))../
15640 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
15650 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
15660 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
15670 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
15680 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
15690 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
156a0 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
156b0 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
156c0 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
156d0 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
156e0 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
156f0 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
15700 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
15710 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
15720 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
15730 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
15740 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
15750 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
15760 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
15770 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
15780 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
15790 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
157a0 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
157b0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
157c0 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
157d0 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
157e0 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
157f0 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
15800 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
15810 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
15820 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
15830 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
15840 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
15850 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
15860 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
15870 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
15880 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
15890 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
158a0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
158b0 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
158c0 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
158d0 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
158e0 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
158f0 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
15900 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
15910 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
15920 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
15930 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
15940 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
15950 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
15960 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
15970 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
15980 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
15990 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
159a0 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
159b0 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
159c0 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
159d0 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
159e0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
159f0 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
15a00 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
15a10 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
15a20 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
15a30 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
15a40 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
15a50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
15a60 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
15a70 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
15a80 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
15a90 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
15aa0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
15ab0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
15ac0 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
15ad0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
15ae0 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
15af0 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
15b00 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
15b10 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
15b20 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
15b30 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
15b40 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
15b50 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
15b60 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
15b70 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
15b80 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
15b90 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
15ba0 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
15bb0 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
15bc0 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
15bd0 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
15be0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
15bf0 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
15c00 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
15c10 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
15c20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
15c30 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
15c40 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
15c50 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
15c60 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
15c70 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
15c80 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
15c90 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
15ca0 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
15cb0 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
15cc0 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
15cd0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
15ce0 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
15cf0 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
15d00 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
15d10 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
15d20 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
15d30 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
15d40 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69  ne */.    u8 joi
15d50 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
15d60 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
15d70 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e  een this able an
15d80 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a  d the previous *
15d90 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e  /.    unsigned n
15da0 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
15db0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
15dc0 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
15dd0 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
15de0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
15df0 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
15e00 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
15e10 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
15e20 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76  /.    unsigned v
15e30 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
15e40 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
15e50 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
15e60 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
15e70 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
15e80 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
15e90 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
15ea0 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66  e in WITH */.#if
15eb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
15ec0 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20  _EXPLAIN.    u8 
15ed0 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f  iSelectId;     /
15ee0 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c  * If pSelect!=0,
15ef0 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73   the id of the s
15f00 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50  ub-select in EQP
15f10 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69   */.#endif.    i
15f20 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
15f30 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
15f40 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
15f50 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
15f60 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
15f70 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
15f80 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
15f90 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
15fa0 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
15fb0 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
15fc0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
15fd0 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
15fe0 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
15ff0 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
16000 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
16010 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
16020 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20  char *zIndex;   
16030 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
16040 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
16050 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
16060 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  e */.    Index *
16070 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e  pIndex;    /* In
16080 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
16090 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
160a0 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f  Index, if any */
160b0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
160c0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
160d0 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
160e0 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
160f0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
16100 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
16110 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
16120 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
16130 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
16140 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
16150 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
16160 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
16170 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
16180 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
16190 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
161a0 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
161b0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
161c0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
161d0 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
161e0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
161f0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
16200 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
16210 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
16220 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
16230 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16240 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
16250 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
16260 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16270 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
16280 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
16290 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
162a0 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
162b0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
162c0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
162d0 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
162e0 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
162f0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
16300 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
16310 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
16320 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
16330 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
16340 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
16350 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
16360 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
16370 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
16380 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
16390 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
163a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
163b0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
163c0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
163d0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
163e0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
163f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
16400 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
16410 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
16420 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
16430 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
16440 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
16450 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
16460 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
16470 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
16480 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
16490 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
164a0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
164b0 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
164c0 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
164d0 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
164e0 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
164f0 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
16500 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
16510 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
16520 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
16530 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
16540 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
16550 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
16560 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
16570 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
16580 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
16590 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
165a0 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
165b0 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
165c0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 41  .#define WHERE_A
165d0 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 20  ND_ONLY         
165e0 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20  0x0080 /* Don't 
165f0 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f 72 20  use indices for 
16600 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66  OR terms */.#def
16610 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
16620 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  Y          0x010
16630 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
16640 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
16650 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
16660 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
16670 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70       0x0200 /* p
16680 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
16690 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
166a0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
166b0 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
166c0 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20  CT    0x0400 /* 
166d0 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
166e0 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
166f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16700 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
16710 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70    0x0800 /* Supp
16720 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
16730 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
16740 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50  efine WHERE_REOP
16750 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31  EN_IDX       0x1
16760 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73  000 /* Try to us
16770 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a  e OP_ReopenIdx *
16780 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
16790 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
167a0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
167b0 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
167c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
167d0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
167e0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
167f0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
16800 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
16810 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
16820 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
16830 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
16840 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
16850 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
16860 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
16870 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
16880 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
16890 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
168a0 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
168b0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
168c0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
168d0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
168e0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
168f0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
16900 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
16910 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
16920 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
16930 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
16940 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
16950 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
16960 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
16970 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
16980 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
16990 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
169a0 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
169b0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
169c0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
169d0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
169e0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
169f0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
16a00 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
16a10 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
16a20 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
16a30 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
16a40 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
16a50 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
16a60 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
16a70 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
16a80 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
16a90 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
16aa0 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
16ab0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
16ac0 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
16ad0 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
16ae0 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
16af0 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
16b00 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
16b10 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
16b20 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
16b30 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
16b40 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
16b50 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
16b60 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
16b70 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
16b80 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
16b90 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
16ba0 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
16bb0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
16bc0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
16bd0 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
16be0 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
16bf0 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
16c00 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
16c10 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
16c20 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
16c30 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
16c40 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
16c50 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
16c60 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
16c70 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
16c80 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
16c90 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
16ca0 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
16cb0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
16cc0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
16cd0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
16ce0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
16cf0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
16d00 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
16d10 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
16d20 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
16d30 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
16d40 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
16d50 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
16d60 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
16d70 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
16d80 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
16d90 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
16da0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
16db0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
16dc0 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
16dd0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
16de0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
16df0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
16e00 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
16e10 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
16e20 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
16e30 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
16e40 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
16e50 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
16e60 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
16e70 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
16e80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16e90 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
16ea0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
16eb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
16ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16ed0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
16ee0 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
16ef0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
16f00 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73   */.  u8 ncFlags
16f10 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  ;          /* Ze
16f20 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
16f30 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
16f40 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
16f50 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16f60 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
16f70 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
16f80 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ld..*/.#define N
16f90 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31  C_AllowAgg  0x01
16fa0 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
16fb0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
16fc0 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
16fd0 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
16fe0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
16ff0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
17000 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
17010 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
17020 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34  C_IsCheck   0x04
17030 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
17040 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
17050 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
17060 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
17070 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
17080 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  8    /* True if 
17090 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
170a0 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
170b0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
170c0 5f 50 61 72 74 49 64 78 20 20 20 30 78 31 30 20  _PartIdx   0x10 
170d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
170e0 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
170f0 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
17100 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17110 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
17120 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
17130 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
17140 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
17150 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
17160 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
17170 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
17180 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
17190 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
171a0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
171b0 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
171c0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
171d0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
171e0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
171f0 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
17200 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
17210 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
17220 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
17230 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
17240 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
17250 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
17260 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
17270 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
17280 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
17290 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
172a0 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
172b0 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
172c0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
172d0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
172e0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
172f0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
17300 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
17310 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
17320 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
17330 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
17340 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
17350 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
17360 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
17370 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
17380 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
17390 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
173a0 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
173b0 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
173c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
173d0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
173e0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
173f0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
17400 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
17410 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
17420 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
17430 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
17440 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
17450 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
17460 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
17470 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
17480 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
17490 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
174a0 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
174b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
174c0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
174d0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
174e0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
174f0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
17500 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
17510 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
17520 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
17530 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
17540 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
17550 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
17560 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
17570 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
17580 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
17590 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
175a0 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
175b0 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
175c0 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20  EXCEPT */.  u16 
175d0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
175e0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
175f0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
17600 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
17610 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
17620 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
17630 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
17640 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69   counters */.  i
17650 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  nt addrOpenEphm[
17660 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  2];   /* OP_Open
17670 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65  Ephem opcodes re
17680 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65  lated to this se
17690 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53  lect */.  u64 nS
176a0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20  electRow;       
176b0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
176c0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
176d0 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ows */.  SrcList
176e0 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
176f0 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
17700 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
17710 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
17720 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
17730 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
17740 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
17750 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
17760 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
17770 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
17780 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
17790 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
177a0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
177b0 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
177c0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
177d0 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
177e0 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
177f0 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
17800 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
17810 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
17820 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
17830 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
17840 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
17850 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
17860 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
17870 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
17880 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
17890 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
178a0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73  */.  Expr *pOffs
178b0 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  et;         /* O
178c0 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
178d0 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
178e0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68   used. */.  With
178f0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
17900 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73     /* WITH claus
17910 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  e attached to th
17920 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55  is select. Or NU
17930 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  LL. */.};../*.**
17940 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
17950 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
17960 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
17970 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
17980 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
17990 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
179a0 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
179b0 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
179c0 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
179d0 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
179e0 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
179f0 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
17a00 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
17a10 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
17a20 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
17a30 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
17a40 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
17a50 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17a60 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
17a70 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
17a80 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
17a90 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
17aa0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
17ab0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
17ac0 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
17ad0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
17ae0 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
17af0 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
17b00 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
17b10 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
17b20 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
17b30 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
17b40 61 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20  adata */.       
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17b60 20 20 20 20 30 78 30 30 34 30 20 20 4e 4f 54 20      0x0040  NOT 
17b70 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  USED */.#define 
17b80 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
17b90 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79     0x0080  /* Sy
17ba0 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
17bb0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30      /*     0x010
17be0 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23  0  NOT USED */.#
17bf0 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
17c00 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30  From      0x0200
17c10 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
17c20 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
17c30 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
17c40 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
17c50 65 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f  ert    0x0400  /
17c60 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
17c70 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
17c80 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
17c90 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
17ca0 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f         0x0800  /
17cb0 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
17cc0 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
17cd0 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
17ce0 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
17cf0 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
17d00 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
17d10 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 0a 0a 2f  und query */.../
17d20 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
17d30 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e   of a SELECT can
17d40 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
17d50 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
17d60 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62   as defined.** b
17d70 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
17d80 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20  lowing macros.  
17d90 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78  The "SRT" prefix
17da0 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52   means "SELECT R
17db0 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a  esult.** Type"..
17dc0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e  **.**     SRT_Un
17dd0 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20  ion       Store 
17de0 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79  results as a key
17df0 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
17e00 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20  index .**       
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
17e20 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
17e30 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
17e40 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
17e50 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
17e60 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
17e70 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
17e80 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
17e90 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
17ea0 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
17eb0 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
17ec0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
17ed0 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
17f00 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
17f10 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
17f20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
17f30 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
17f40 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
17f50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
17f60 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
17f70 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
17f80 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
17f90 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
17fc0 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
17fd0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
17fe0 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
17ff0 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
18000 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
18010 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
18020 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
18030 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
18040 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
18050 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
18060 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
18070 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
18080 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
18090 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
180a0 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
180b0 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
180c0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
180d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
180e0 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
180f0 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
18100 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
18110 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
18130 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
18140 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
18150 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
18180 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
18190 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
181a0 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
181b0 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
181c0 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
181d0 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
181e0 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
181f0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
18200 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
18210 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
18220 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
18230 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18250 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
18260 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
18270 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
18280 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
18290 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
182a0 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
182b0 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
182c0 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
182f0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
18300 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
18310 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
18320 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
18330 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
18340 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
18350 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
18380 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
18390 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
183a0 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
183b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
183c0 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
183d0 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
183e0 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
18410 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
18420 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
18430 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
18440 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
18450 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
18460 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
18470 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
18480 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
18490 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
184a0 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
184b0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
184c0 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
184d0 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
184e0 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
18510 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
18520 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
18530 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
18560 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
18570 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
18580 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
185b0 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
185c0 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
185d0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
185e0 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
185f0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
18600 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
18610 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
18620 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
18630 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
18640 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
18670 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
18680 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
18690 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
186a0 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
186b0 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
186c0 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
186d0 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
18700 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
18710 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
18720 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
18730 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
18740 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
18750 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
18760 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
18770 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
18780 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
18790 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
187c0 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
187d0 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
187e0 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18800 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
18810 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
18820 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
18830 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
18840 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
18850 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
18860 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
18870 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
18880 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
18890 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
188a0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
188b0 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
188c0 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
188d0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
188e0 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
188f0 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
18900 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
18910 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
18920 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
18930 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
18960 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
18970 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
18980 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
18990 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
189a0 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
189b0 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
189c0 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
189d0 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
189e0 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
189f0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
18a00 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
18a10 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
18a20 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
18a30 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
18a40 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
18a50 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
18a60 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
18a70 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
18a80 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
18a90 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
18aa0 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
18ab0 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
18ac0 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
18ad0 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
18ae0 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
18af0 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
18b00 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
18b10 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
18b20 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
18b30 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
18b40 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
18b50 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
18b60 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
18b70 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
18b80 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
18b90 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
18ba0 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
18bb0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
18bc0 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
18bd0 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
18be0 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
18bf0 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
18c00 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18c10 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
18c20 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
18c30 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
18c40 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
18c50 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
18c60 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
18c70 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
18c80 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
18c90 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
18ca0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
18cb0 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
18cc0 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
18cd0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
18ce0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
18cf0 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
18d00 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
18d10 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
18d20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
18d30 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
18d40 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
18d50 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
18d60 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
18d70 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
18d80 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
18d90 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
18da0 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
18db0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
18dc0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
18dd0 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
18de0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
18df0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
18e00 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
18e10 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
18e20 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
18e30 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
18e40 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
18e50 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
18e60 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18e70 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
18e80 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
18e90 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
18ea0 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
18eb0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
18ec0 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
18ed0 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
18ee0 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20  affSdst;        
18ef0 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
18f00 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
18f10 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
18f20 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
18f30 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
18f40 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
18f50 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
18f60 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
18f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
18f80 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
18f90 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
18fa0 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
18fb0 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
18fc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
18fd0 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
18fe0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
18ff0 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
19000 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
19010 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
19020 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
19030 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
19040 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
19050 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
19060 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
19070 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a  AUTOINCREMENT .*
19080 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
19090 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
190a0 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
190b0 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
190c0 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
190d0 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
190e0 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
190f0 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
19100 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
19110 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
19120 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
19130 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
19140 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
19150 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
19160 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
19170 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
19180 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  wn within trigge
19190 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
191a0 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
191b0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
191c0 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
191d0 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
191e0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
191f0 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
19200 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
19210 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
19220 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
19230 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
19240 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
19250 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
19260 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
19270 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
19280 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
19290 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
192a0 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
192b0 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
192c0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
192d0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
192e0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
192f0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
19300 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
19310 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
19320 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
19330 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
19340 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
19350 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
19360 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
19370 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
19380 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
19390 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
193a0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
193b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
193c0 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
193d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
193e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
193f0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
19400 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20  ach .** trigger 
19410 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
19420 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
19430 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
19440 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
19450 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
19460 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
19470 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
19480 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
19490 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
194a0 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
194b0 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
194c0 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
194d0 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
194e0 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
194f0 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
19500 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
19510 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
19520 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
19530 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
19540 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
19550 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
19560 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
19570 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
19580 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
19590 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
195a0 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
195b0 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
195c0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
195d0 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
195e0 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
195f0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
19600 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
19610 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
19620 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
19630 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
19640 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
19650 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
19660 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
19670 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
19680 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
19690 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
196a0 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
196b0 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d  NSERT .** statem
196c0 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
196d0 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
196e0 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
196f0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
19700 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
19710 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
19720 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
19730 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
19740 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
19750 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
19760 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
19770 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
19780 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
19790 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
197a0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
197b0 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
197c0 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
197d0 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
197e0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
197f0 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
19800 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
19810 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
19820 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
19830 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
19840 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
19850 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
19860 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
19870 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
19880 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
19890 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
198a0 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
198b0 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
198c0 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
198d0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
198e0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
198f0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
19900 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
19910 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
19920 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
19930 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
19940 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
19950 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
19960 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
19970 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
19980 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
19990 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
199a0 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
199b0 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
199c0 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
199d0 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
199e0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
199f0 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
19a00 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
19a10 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
19a20 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
19a30 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
19a40 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
19a50 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
19a60 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
19a70 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
19a80 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
19a90 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
19aa0 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
19ab0 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
19ac0 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
19ad0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
19ae0 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
19af0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
19b00 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
19b10 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
19b20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
19b30 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
19b40 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
19b50 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
19b60 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
19b70 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
19b80 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
19b90 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
19ba0 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
19bb0 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
19bc0 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
19bd0 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
19be0 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
19bf0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
19c00 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
19c10 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
19c20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
19c30 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
19c40 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
19c50 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
19c60 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
19c70 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
19c80 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
19c90 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
19ca0 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
19cb0 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
19cc0 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
19cd0 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
19ce0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
19cf0 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
19d00 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
19d10 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
19d20 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
19d30 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
19d40 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
19d50 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a   shared-cache .*
19d60 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
19d70 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
19d80 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
19d90 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
19da0 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
19db0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
19dc0 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
19dd0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
19de0 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
19df0 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
19e00 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
19e10 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
19e20 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
19e30 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
19e40 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
19e50 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19e60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19e70 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
19e80 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
19e90 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
19ea0 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
19eb0 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
19ec0 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
19ed0 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
19ee0 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
19ef0 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
19f00 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
19f10 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
19f20 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
19f30 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
19f40 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
19f50 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
19f60 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
19f70 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
19f80 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
19f90 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
19fa0 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
19fb0 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
19fc0 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
19fd0 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
19fe0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19ff0 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
1a000 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
1a010 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1a020 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
1a030 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a040 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
1a050 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
1a060 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
1a070 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
1a080 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1a090 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
1a0a0 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
1a0b0 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
1a0c0 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
1a0d0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1a0e0 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
1a0f0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
1a100 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
1a110 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
1a120 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
1a130 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1a140 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1a150 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
1a160 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
1a170 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
1a180 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61  tants */.  int a
1a190 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
1a1a0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
1a1b0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
1a1c0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  gisters */.  int
1a1d0 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   nRangeReg;     
1a1e0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
1a1f0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1a200 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1a210 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20  nt iRangeReg;   
1a220 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
1a230 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61  ister in tempora
1a240 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1a250 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  k */.  int nErr;
1a260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a270 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1a280 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  seen */.  int nT
1a290 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
1a2a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76  * Number of prev
1a2b0 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
1a2c0 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f   VDBE cursors */
1a2d0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
1a2e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a2f0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
1a300 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1a310 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20  .  int nSet;    
1a320 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a330 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73  r of sets used s
1a340 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1a350 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  Once;           
1a360 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f  /* Number of OP_
1a370 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  Once instruction
1a380 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  s so far */.  in
1a390 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20  t nOpAlloc;     
1a3a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a3b0 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
1a3c0 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1a3d0 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70  /.  int iFixedOp
1a3e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65  ;        /* Neve
1a3f0 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64  r back out opcod
1a400 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72  es iFixedOp-1 or
1a410 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e   earlier */.  in
1a420 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
1a430 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1a440 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
1a450 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
1a460 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50  ints */.  int iP
1a470 61 72 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f  artIdxTab;     /
1a480 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  * Table correspo
1a490 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69  nding to a parti
1a4a0 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  al index */.  in
1a4b0 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20  t iCacheLevel;  
1a4c0 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76     /* ColCache v
1a4d0 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61  alid when aColCa
1a4e0 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43  che[].iLevel<=iC
1a4f0 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69  acheLevel */.  i
1a500 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20  nt iCacheCnt;   
1a510 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75      /* Counter u
1a520 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
1a530 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20  aColCache[].lru 
1a540 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1a550 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
1a560 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61   /* Number of la
1a570 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
1a580 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
1a590 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
1a5a0 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
1a5b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  */.  struct yCol
1a5c0 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
1a5d0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
1a5e0 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
1a5f0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
1a600 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  i16 iColumn;    
1a610 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1a620 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
1a630 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
1a640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
1a650 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
1a660 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
1a670 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
1a680 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
1a690 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
1a6a0 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
1a6b0 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
1a6c0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
1a6d0 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
1a6e0 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
1a6f0 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
1a700 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
1a710 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
1a720 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
1a730 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
1a740 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
1a750 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
1a760 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
1a770 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
1a780 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
1a790 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1a7a0 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f  pConstExpr;/* Co
1a7b0 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
1a7c0 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  ns */.  Token co
1a7d0 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
1a7e0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
1a7f0 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
1a800 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
1a810 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
1a820 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
1a830 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
1a840 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
1a850 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
1a860 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
1a870 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
1a880 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
1a890 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
1a8a0 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53  nt cookieValue[S
1a8b0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a8c0 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65  ED+2];  /* Value
1a8d0 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20  s of cookies to 
1a8e0 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20  verify */.  int 
1a8f0 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
1a900 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1a910 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
1a920 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
1a930 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
1a940 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
1a950 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1a960 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
1a970 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
1a980 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
1a990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
1a9a0 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
1a9b0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
1a9c0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
1a9d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a9e0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
1a9f0 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
1aa00 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
1aa10 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
1aa20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
1aa30 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
1aa40 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
1aa50 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
1aa60 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
1aa70 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
1aa80 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
1aa90 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
1aaa0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
1aab0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
1aac0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
1aad0 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
1aae0 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
1aaf0 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
1ab00 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
1ab10 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
1ab20 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
1ab30 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
1ab40 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
1ab50 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
1ab60 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
1ab70 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
1ab80 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
1ab90 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
1aba0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
1abb0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1abc0 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
1abd0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b   */.  int addrSk
1abe0 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64  ipPK;      /* Ad
1abf0 64 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63  dress of instruc
1ac00 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49  tion to skip PRI
1ac10 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
1ac20 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1ac30 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1ac40 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1ac50 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1ac60 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1ac70 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1ac80 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1ac90 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1aca0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1acb0 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1acc0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1acd0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1ace0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1acf0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1ad00 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1ad10 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1ad20 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1ad30 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1ad40 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1ad50 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1ad60 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1ad70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1ad80 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1ad90 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1ada0 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1adb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1adc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1add0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ade0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1adf0 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
1ae00 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
1ae10 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
1ae20 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
1ae30 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
1ae40 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
1ae50 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
1ae60 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
1ae70 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
1ae80 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
1ae90 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
1aea0 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73  of(Parse,nVar) s
1aeb0 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64  o the nVar field
1aec0 20 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72   must be the fir
1aed0 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e  st field.  ** in
1aee0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1aef0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1af00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af40 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
1af70 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
1af80 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
1af90 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
1afa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1afb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
1afc0 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
1afd0 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
1afe0 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1aff0 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1b000 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1b010 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1b020 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68  /.  u8 bFreeWith
1b030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b040 20 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73   True if pWith s
1b050 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77  hould be freed w
1b060 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  ith parser */.  
1b070 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1b080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1b090 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1b0a0 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1b0b0 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1b0c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1b0d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1b0e0 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1b0f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1b100 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1b110 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1b120 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1b130 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1b140 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b150 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1b160 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1b170 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b190 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1b1a0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1b1b0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1b1c0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1b1d0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1b1e0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1b1f0 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1b200 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1b210 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1b220 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1b230 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1b240 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1b250 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1b260 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1b270 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1b280 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1b290 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1b2a0 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1b2b0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1b2c0 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1b2d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1b2e0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1b2f0 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1b300 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1b310 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1b320 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1b330 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1b340 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1b350 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1b360 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1b370 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1b380 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1b390 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1b3a0 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1b3b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1b3c0 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1b3d0 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1b3e0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1b3f0 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1b400 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1b410 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1b420 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1b430 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1b440 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1b450 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1b460 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1b470 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1b480 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1b490 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1b4a0 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1b4b0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1b4c0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1b4d0 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1b4e0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1b4f0 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1b500 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1b510 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1b520 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1b530 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1b540 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1b550 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1b560 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1b570 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1b580 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1b590 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1b5a0 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1b5b0 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1b5c0 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1b5d0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1b5e0 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1b5f0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1b600 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1b610 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1b620 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1b630 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1b640 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1b650 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b670 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1b680 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1b690 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1b6a0 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1b6b0 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1b6c0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1b6d0 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1b6e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b6f0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1b700 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1b710 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1b720 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1b730 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1b740 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1b750 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1b760 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1b770 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b780 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1b790 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1b7a0 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1b7b0 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1b7c0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1b7d0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1b7e0 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1b7f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1b800 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1b810 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1b820 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1b830 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1b840 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1b850 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b870 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1b880 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1b890 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1b8a0 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1b8b0 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1b8c0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
1b8d0 74 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 72  t the values for
1b8e0 20 49 53 4e 4f 4f 50 20 61 6e 64 20 4c 45 4e 47   ISNOOP and LENG
1b8f0 54 48 41 52 47 20 61 72 65 20 74 68 65 20 73 61  THARG are the sa
1b900 6d 65 2e 20 20 42 75 74 20 61 73 20 0a 2a 2a 20  me.  But as .** 
1b910 74 68 6f 73 65 20 62 69 74 73 20 61 72 65 20 6e  those bits are n
1b920 65 76 65 72 20 75 73 65 64 20 6f 6e 20 74 68 65  ever used on the
1b930 20 73 61 6d 65 20 6f 70 63 6f 64 65 2c 20 74 68   same opcode, th
1b940 65 20 6f 76 65 72 6c 61 70 20 69 73 20 68 61 72  e overlap is har
1b950 6d 6c 65 73 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mless..*/.#defin
1b960 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1b970 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1b980 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1b990 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
1b9a0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1b9b0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1b9c0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1b9d0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1b9e0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1b9f0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1ba00 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1ba10 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1ba20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1ba30 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ba40 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1ba50 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1ba60 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1ba70 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1ba80 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1ba90 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1baa0 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1bab0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1bac0 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1bad0 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
1bae0 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
1baf0 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
1bb00 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
1bb10 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  P_Column */.#def
1bb20 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
1bb30 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
1bb40 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
1bb50 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
1bb60 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ok only */.#defi
1bb70 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1bb80 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1bb90 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1bba0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1bbb0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1bbc0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1bbd0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1bbe0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1bbf0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1bc00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1bc10 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1bc20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1bc30 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1bc40 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1bc50 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1bc60 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1bc70 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  02    /* P2 to O
1bc80 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1bc90 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1bca0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1bcb0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1bcc0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1bcd0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1bce0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1bcf0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1bd00 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1bd10 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1bd20 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1bd30 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1bd40 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1bd50 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1bd60 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1bd70 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1bd80 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1bd90 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1bda0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1bdb0 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1bdc0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1bdd0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1bde0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1bdf0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1be00 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1be10 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1be20 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1be30 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1be40 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1be50 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1be60 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1be70 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1be80 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1be90 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1bea0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1beb0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1bec0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1bed0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1bee0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1bef0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1bf00 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1bf10 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1bf20 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1bf30 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1bf40 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1bf50 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1bf60 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1bf70 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1bf80 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1bf90 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1bfa0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1bfb0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1bfc0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1bfd0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1bfe0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1bff0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1c020 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1c030 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1c040 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1c050 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1c060 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c080 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1c090 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1c0a0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1c0b0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1c0d0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1c0e0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1c0f0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1c100 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1c110 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1c120 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1c130 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1c140 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1c150 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1c160 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1c170 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1c180 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1c190 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1c1c0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1c1d0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1c1e0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1c1f0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1c200 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1c210 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1c220 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1c230 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1c240 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1c250 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1c260 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1c270 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1c280 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1c290 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1c2a0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1c2b0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1c2c0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1c2d0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1c2e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1c2f0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1c300 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1c310 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1c320 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1c330 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1c340 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1c350 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1c360 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1c370 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1c380 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1c390 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1c3a0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1c3b0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1c3c0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1c3d0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1c3e0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1c3f0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1c400 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1c410 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1c420 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1c430 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1c440 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1c450 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1c460 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1c470 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1c480 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1c490 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1c4a0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1c4b0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1c4c0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1c4d0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1c4e0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1c4f0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1c500 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1c510 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1c520 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1c530 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1c540 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1c550 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1c560 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1c570 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1c580 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1c590 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1c5a0 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1c5b0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1c5c0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1c5d0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1c5e0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1c5f0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1c600 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1c610 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1c620 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1c630 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1c640 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1c650 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1c660 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1c670 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1c680 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1c690 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1c6a0 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1c6b0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1c6c0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1c6d0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1c6e0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1c6f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1c700 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1c710 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1c720 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1c730 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1c740 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1c750 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1c760 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1c770 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1c780 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1c790 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1c7a0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1c7b0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1c7c0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1c7d0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1c7e0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1c7f0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1c800 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1c810 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1c820 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1c830 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1c840 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1c850 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1c860 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1c870 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1c880 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1c890 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1c8a0 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1c8b0 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1c8c0 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1c8d0 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
1c8e0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1c8f0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1c900 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1c910 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1c920 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1c930 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1c940 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1c950 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1c960 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1c970 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1c980 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1c990 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1c9a0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1c9b0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1c9c0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1c9d0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1c9e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1c9f0 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
1ca00 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1ca10 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1ca20 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1ca30 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1ca40 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1ca60 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1ca70 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1ca80 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1ca90 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1caa0 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1cab0 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1cad0 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1cae0 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1caf0 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1cb00 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1cb10 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1cb20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1cb30 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1cb40 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1cb50 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1cb60 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1cb70 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1cb80 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1cb90 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1cba0 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1cbb0 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1cbc0 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1cbd0 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1cbe0 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1cbf0 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1cc00 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1cc10 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1cc20 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
1cc30 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
1cc40 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1cc50 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
1cc60 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1cc70 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1cc80 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1cc90 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1cca0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1ccb0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1ccc0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1ccd0 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1cce0 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1ccf0 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1cd00 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1cd10 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1cd20 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1cd30 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1cd40 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1cd50 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1cd60 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1cd70 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1cd80 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1cd90 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1cda0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1cdb0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1cdc0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1cdd0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1cde0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1cdf0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1ce00 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1ce10 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1ce20 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1ce30 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1ce40 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1ce50 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1ce60 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1ce70 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1ce80 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1ce90 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1cea0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1ceb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1cec0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1ced0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1cee0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1cef0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1cf00 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1cf10 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1cf20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1cf30 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1cf40 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1cf50 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1cf60 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1cf70 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1cf80 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1cf90 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1cfa0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1cfb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1cfc0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1cfd0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1cfe0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1cff0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1d000 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1d010 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1d020 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1d030 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1d040 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1d050 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1d060 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1d070 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1d080 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1d090 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1d0a0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1d0b0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1d0c0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1d0d0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1d0e0 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1d0f0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1d100 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1d110 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1d120 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1d130 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1d140 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1d150 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1d160 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1d170 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1d180 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1d190 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1d1a0 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1d1b0 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1d1c0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1d1d0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1d1e0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1d1f0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1d200 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1d210 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1d220 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1d230 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1d240 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1d250 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  d string length 
1d260 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1d270 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1d280 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1d290 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1d2a0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1d2b0 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1d2c0 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1d2d0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1d2e0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1d2f0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1d300 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1d310 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1d320 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1d330 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1d340 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1d350 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1d360 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1d370 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1d380 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1d390 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1d3a0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1d3b0 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1d3c0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1d3d0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1d3e0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1d3f0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1d400 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1d410 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1d420 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1d430 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1d440 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1d450 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1d460 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1d470 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1d480 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1d490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1d4a0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1d4b0 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1d4c0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1d4d0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1d4e0 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1d4f0 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1d500 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1d510 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1d520 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1d530 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1d540 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1d550 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1d560 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1d570 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d590 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1d5a0 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1d5b0 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1d5c0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1d5d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1d5e0 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1d5f0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1d600 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d620 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1d630 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1d640 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1d670 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1d680 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1d690 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1d6c0 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1d6d0 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1d6e0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1d710 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1d720 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1d750 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1d760 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1d770 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1d780 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1d790 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1d7a0 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1d7b0 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1d7e0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1d7f0 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1d800 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1d810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1d820 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1d830 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1d840 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1d850 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1d860 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1d870 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1d880 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1d890 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1d8a0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1d8b0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1d8c0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1d8d0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1d8e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d8f0 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1d900 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1d910 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1d940 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1d950 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d970 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1d980 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1d990 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1d9a0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1d9b0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1d9c0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1d9d0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1d9e0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1da00 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1da10 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1da20 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1da50 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1da60 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1da70 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1da80 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1da90 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1daa0 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dac0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1dad0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1dae0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1db10 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1db20 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1db40 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1db50 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1db60 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1db90 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1dba0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1dbb0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1dbc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1dbd0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1dbe0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1dbf0 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1dc00 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1dc10 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1dc20 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1dc30 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1dc40 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1dc50 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1dc60 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1dc70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1dc80 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1dc90 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1dca0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1dcb0 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1dce0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1dcf0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1dd00 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1dd10 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1dd20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1dd30 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1dd40 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1dd50 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1dd60 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1dd70 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1dd80 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1dd90 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1dda0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1ddb0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1ddc0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1ddd0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1dde0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1ddf0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1de10 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1de20 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1de30 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
1de40 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1de50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1de60 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1de70 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1de80 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1de90 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1dea0 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1deb0 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1dec0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
1ded0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1dee0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1def0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1df00 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1df10 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1df40 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1df50 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1df60 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1df70 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1df80 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1df90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1dfa0 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1dfb0 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
1dfc0 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
1dfd0 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
1dfe0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
1dff0 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
1e000 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
1e010 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
1e020 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
1e030 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
1e040 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
1e050 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
1e060 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
1e070 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
1e080 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
1e090 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
1e0a0 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
1e0b0 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
1e0c0 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
1e0d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
1e100 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
1e110 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1e120 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1e130 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
1e140 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
1e150 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
1e160 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
1e170 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
1e180 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1e190 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1e1a0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1e1b0 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1e1c0 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
1e1d0 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
1e1e0 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
1e1f0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1e200 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
1e210 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
1e220 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
1e230 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
1e240 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
1e250 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
1e260 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
1e270 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
1e280 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1e290 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
1e2a0 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
1e2b0 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
1e2c0 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
1e2d0 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
1e2e0 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
1e2f0 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
1e300 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
1e310 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
1e320 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
1e330 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
1e340 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
1e350 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
1e360 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
1e370 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
1e380 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
1e390 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
1e3a0 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
1e3b0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1e3c0 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
1e3d0 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
1e3e0 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
1e3f0 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
1e400 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
1e410 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
1e420 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
1e430 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
1e440 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
1e450 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
1e460 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
1e470 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
1e480 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
1e490 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
1e4a0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
1e4b0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
1e4c0 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
1e4d0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
1e4e0 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
1e4f0 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
1e500 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
1e510 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
1e520 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1e530 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
1e540 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
1e550 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
1e560 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1e570 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e590 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1e5a0 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1e5b0 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e5e0 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1e5f0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e620 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1e630 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1e640 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1e650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1e670 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1e680 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e6b0 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
1e6c0 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1e6d0 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1e700 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1e710 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1e720 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1e730 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1e740 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1e750 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1e760 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1e770 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1e780 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1e790 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1e7a0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1e7b0 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1e7c0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1e7d0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1e7e0 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1e7f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1e800 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1e810 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1e820 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1e830 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1e840 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1e850 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1e860 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1e870 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1e880 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1e890 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1e8a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1e8b0 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1e8c0 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1e8d0 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1e8e0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1e8f0 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1e900 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1e910 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1e920 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1e930 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1e940 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1e950 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1e960 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1e970 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1e980 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
1e990 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
1e9a0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
1e9b0 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
1e9c0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
1e9d0 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
1e9e0 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
1e9f0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
1ea00 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ea30 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
1ea40 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
1ea50 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ea70 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
1ea80 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
1ea90 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
1eaa0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1eab0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
1eac0 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
1ead0 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
1eae0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1eb10 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
1eb20 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eb40 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
1eb50 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
1eb60 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
1eb70 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
1eba0 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
1ebb0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1ebc0 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *zErr;          
1ebd0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
1ebe0 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
1ebf0 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
1ec00 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f  .  } a[1];.};../
1ec10 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
1ec20 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
1ec30 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
1ec40 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
1ec50 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
1ec60 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
1ec70 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
1ec80 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
1ec90 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
1eca0 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
1ecb0 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
1ece0 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed00 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
1ed10 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
1ed20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
1ed30 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
1ed40 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
1ed80 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
1ed90 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
1eda0 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
1edb0 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
1edc0 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
1edd0 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
1ede0 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
1edf0 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
1ee00 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
1ee10 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
1ee20 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
1ee30 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
1ee40 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
1ee50 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
1ee60 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
1ee70 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
1ee80 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
1ee90 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
1eea0 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
1eeb0 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
1eec0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
1eed0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
1eee0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
1eef0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
1ef00 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
1ef10 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
1ef20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
1ef30 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
1ef40 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
1ef50 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1ef60 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
1ef70 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
1ef80 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1ef90 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
1efa0 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
1efb0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
1efc0 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54  NE__).../*.** FT
1efd0 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
1efe0 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
1eff0 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
1f000 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
1f010 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1f020 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
1f030 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
1f040 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a  n we also all.**
1f050 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
1f060 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
1f070 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
1f080 73 73 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  sse for SQLITE_E
1f090 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
1f0a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1f0b0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
1f0c0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1f0d0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
1f0e0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
1f0f0 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69  NABLE_FTS3.#endi
1f100 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
1f110 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
1f120 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
1f130 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
1f140 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
1f150 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
1f160 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
1f170 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
1f180 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
1f190 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
1f1a0 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
1f1b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1f1c0 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
1f1d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
1f1e0 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
1f1f0 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
1f200 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1f210 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1f220 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
1f230 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
1f240 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
1f250 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
1f260 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
1f270 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
1f280 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
1f290 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
1f2a0 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
1f2b0 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
1f2c0 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
1f2d0 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
1f2e0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1f2f0 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
1f300 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
1f310 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
1f320 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1f330 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1f340 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
1f350 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
1f360 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f370 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f380 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
1f390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f3a0 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
1f3b0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f3c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f3d0 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
1f3e0 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
1f3f0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f400 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f410 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
1f420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
1f430 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
1f440 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f450 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f460 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
1f470 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
1f480 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f490 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f4a0 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
1f4b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
1f4c0 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
1f4d0 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
1f4e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1f4f0 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  )]).#else.# defi
1f500 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
1f510 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
1f520 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1f530 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1f540 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
1f550 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
1f560 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1f570 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1f580 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
1f590 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1f5a0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1f5b0 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
1f5c0 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
1f5d0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1f5e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f5f0 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
1f600 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
1f610 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1f620 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
1f630 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
1f640 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1f650 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f660 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
1f670 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
1f680 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66  char)(x)).#endif
1f690 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
1f6a0 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
1f6b0 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ypes.*/.#define 
1f6c0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73  sqlite3StrICmp s
1f6d0 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69  qlite3_stricmp.i
1f6e0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
1f6f0 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
1f700 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
1f710 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
1f720 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
1f730 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
1f740 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f750 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
1f760 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
1f770 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  e3Malloc(int);.v
1f780 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1f790 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69  ocZero(int);.voi
1f7a0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
1f7b0 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
1f7c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1f7d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
1f7e0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1f7f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
1f800 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
1f810 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
1f820 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
1f830 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
1f840 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
1f850 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
1f860 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29  lloc(void*, int)
1f870 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1f880 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
1f890 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
1f8a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1f8b0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
1f8c0 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
1f8d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1f8e0 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
1f8f0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
1f900 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
1f910 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
1f920 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
1f930 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
1f940 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
1f950 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28  e3ScratchMalloc(
1f960 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f970 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f  e3ScratchFree(vo
1f980 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
1f990 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
1f9a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f9b0 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
1f9c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
1f9d0 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
1f9e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1f9f0 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
1fa00 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
1fa10 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
1fa20 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
1fa30 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
1fa40 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
1fa50 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
1fa60 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
1fa70 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
1fa80 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
1fa90 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
1faa0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
1fab0 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
1fac0 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
1fad0 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
1fae0 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
1faf0 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
1fb00 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
1fb10 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
1fb20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
1fb30 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
1fb40 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
1fb50 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
1fb60 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
1fb70 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
1fb80 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
1fb90 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
1fba0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fbb0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1fbc0 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
1fbd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1fbe0 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1fbf0 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
1fc00 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
1fc10 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1fc20 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
1fc30 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65   .#else.# define
1fc40 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1fc50 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
1fc60 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
1fc70 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
1fc80 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
1fc90 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
1fca0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
1fcb0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1fcc0 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
1fcd0 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
1fce0 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
1fcf0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1fd00 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
1fd10 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
1fd20 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
1fd30 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
1fd40 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
1fd50 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1fd60 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
1fd70 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1fd80 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
1fd90 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
1fda0 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  ;.#endif...#ifnd
1fdb0 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
1fdc0 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OMIT.  sqlite3_m
1fdd0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
1fde0 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75  st *sqlite3Defau
1fdf0 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  ltMutex(void);. 
1fe00 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1fe10 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1fe20 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
1fe30 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
1fe40 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
1fe50 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
1fe60 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
1fe70 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
1fe80 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
1fe90 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
1fea0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ..int sqlite3Sta
1feb0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
1fec0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
1fed0 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sAdd(int, int);.
1fee0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
1fef0 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b  usSet(int, int);
1ff00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1ff10 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
1ff20 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
1ff30 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
1ff40 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1ff50 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
1ff60 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
1ff70 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1ff80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1ff90 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
1ffa0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1ffb0 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
1ffc0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
1ffd0 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
1ffe0 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
1fff0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
20000 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
20010 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
20020 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
20030 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
20040 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
20050 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20070 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
20080 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
20090 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
200a0 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
200b0 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
200c0 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64  values */.};..#d
200d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
200e0 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30  NTF_INTERNAL 0x0
200f0 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  1.#define SQLITE
20100 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20  _PRINTF_SQLFUNC 
20110 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74   0x02.void sqlit
20120 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
20130 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
20140 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
20150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  ;.void sqlite3XP
20160 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
20170 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
20180 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
20190 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
201a0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
201b0 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
201c0 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
201d0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
201e0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
201f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70  char *sqlite3MAp
20200 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63  pendf(sqlite3*,c
20210 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
20220 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e  ,...);.#if defin
20230 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
20240 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
20250 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
20260 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
20270 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
20280 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
20290 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
202a0 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
202b0 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
202c0 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
202d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70  .#endif../* Outp
202e0 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f  ut formatting fo
202f0 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  r SQLITE_TESTCTR
20300 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66  L_EXPLAIN */.#if
20310 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
20320 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c  ENABLE_TREE_EXPL
20330 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  AIN).  void sqli
20340 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28  te3ExplainBegin(
20350 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
20360 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 72 69  qlite3ExplainPri
20370 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  ntf(Vdbe*, const
20380 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20   char*, ...);.  
20390 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
203a0 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20  ainNL(Vdbe*);.  
203b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
203c0 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29 3b 0a  ainPush(Vdbe*);.
203d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
203e0 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b  plainPop(Vdbe*);
203f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20400 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56 64 62  xplainFinish(Vdb
20410 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
20420 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74  te3ExplainSelect
20430 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29  (Vdbe*, Select*)
20440 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20450 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64 62 65  ExplainExpr(Vdbe
20460 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
20470 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
20480 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a 2c 20  ExprList(Vdbe*, 
20490 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f  ExprList*);.  co
204a0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
204b0 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
204c0 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  (Vdbe*);.#else.#
204d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
204e0 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a 23  xplainBegin(X).#
204f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
20500 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c 42  xplainSelect(A,B
20510 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20520 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 41 2c  e3ExplainExpr(A,
20530 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
20540 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69  te3ExplainExprLi
20550 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  st(A,B).# define
20560 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
20570 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66 69 6e  inish(X).# defin
20580 65 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  e sqlite3VdbeExp
20590 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23 65  lanation(X) 0.#e
205a0 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69  ndif...void sqli
205b0 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61  te3SetString(cha
205c0 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  r **, sqlite3*, 
205d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
205e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
205f0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
20600 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
20610 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
20620 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e  quote(char*);.in
20630 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
20640 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
20650 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
20660 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
20670 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
20680 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
20690 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
206a0 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
206b0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
206c0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
206d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
206e0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
206f0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
20700 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
20710 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
20720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
20730 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
20740 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
20750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
20760 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
20770 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  arse*);.Expr *sq
20780 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
20790 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
207a0 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
207b0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
207c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
207d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
207e0 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
207f0 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
20800 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
20810 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
20820 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
20830 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
20840 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
20850 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
20860 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
20870 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
20880 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
20890 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
208a0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
208b0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
208c0 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
208d0 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
208e0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
208f0 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
20900 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
20910 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
20920 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
20930 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
20940 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
20950 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
20960 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
20970 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
20980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
20990 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
209a0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
209b0 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
209c0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
209d0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
209e0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
209f0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
20a00 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
20a10 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
20a20 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
20a30 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
20a40 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
20a50 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
20a60 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
20a70 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
20a80 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
20a90 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
20aa0 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
20ab0 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
20ac0 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
20ad0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
20ae0 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
20af0 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
20b00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20b10 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
20b20 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
20b30 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
20b40 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
20b50 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  3*);.Table *sqli
20b60 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
20b70 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
20b80 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
20b90 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
20ba0 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
20bb0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
20bc0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
20bd0 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
20be0 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
20bf0 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
20c00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
20c10 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
20c20 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
20c30 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
20c40 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
20c50 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
20c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20c70 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
20c80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
20c90 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
20ca0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
20cb0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
20cc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20cd0 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
20ce0 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
20cf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20d00 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
20d10 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
20d20 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
20d30 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
20d40 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
20d50 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
20d60 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
20d70 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
20d80 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
20d90 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
20da0 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
20db0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
20dc0 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
20dd0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
20de0 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20e00 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
20e10 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
20e20 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
20e30 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
20e40 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
20e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
20e60 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  Once(Parse *);..
20e70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
20e80 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
20e90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20ea0 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
20eb0 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
20ec0 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
20ed0 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
20ee0 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
20ef0 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
20f00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
20f10 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
20f20 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
20f30 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
20f40 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
20f50 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
20f60 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
20f70 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
20f80 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
20f90 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
20fa0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
20fb0 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74  ze(Bitvec*);.int
20fc0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
20fd0 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
20fe0 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71  t*);..RowSet *sq
20ff0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
21000 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
21010 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
21020 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
21030 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
21040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
21050 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
21060 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
21070 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
21080 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
21090 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
210a0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
210b0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
210c0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
210d0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
210e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
210f0 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
21100 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
21110 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
21120 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
21130 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
21140 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
21150 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
21160 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
21170 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
21180 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21190 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
211a0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
211b0 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
211c0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
211d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
211e0 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
211f0 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
21200 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
21210 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
21220 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
21230 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
21240 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
21250 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
21260 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21270 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
21280 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
21290 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
212a0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
212b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
212c0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
212d0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
212e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
212f0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
21300 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
21310 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
21320 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
21330 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
21340 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
21350 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
21360 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21370 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
21380 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
21390 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
213a0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
213b0 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
213c0 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
213d0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
213e0 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
213f0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
21400 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
21410 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
21420 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
21430 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
21440 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
21450 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
21460 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
21470 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
21480 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
21490 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
214a0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
214b0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
214c0 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
214d0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
214e0 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
214f0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
21500 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
21540 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
21550 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
21560 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
21570 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
21580 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
21590 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
215a0 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
215b0 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
215c0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
215d0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
215e0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
215f0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
21600 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
21610 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
21620 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
21630 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
21640 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
21650 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
21660 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
21670 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
21680 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
21690 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
216a0 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
216b0 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
216c0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
216d0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
216e0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
216f0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
21700 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
21710 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21720 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
21730 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21740 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
21750 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
21760 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
21770 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
21780 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
21790 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
217a0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
217b0 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
217c0 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
217d0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
217e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
217f0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
21800 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
21810 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
21820 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
21830 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
21840 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
21850 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
21860 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
21870 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21880 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
21890 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
218a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
218b0 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
218c0 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
218d0 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
218e0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
218f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
21900 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
21910 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
21920 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
21930 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
21940 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
21950 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
21960 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
21970 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
21980 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
21990 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
219a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
219b0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
219c0 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
219d0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
219e0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
219f0 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
21a00 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
21a10 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
21a20 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
21a30 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
21a40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21a50 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
21a60 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
21a70 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
21a80 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
21a90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
21aa0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
21ab0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
21ac0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
21ad0 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
21ae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
21af0 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
21b00 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21b10 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
21b20 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
21b30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
21b40 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
21b50 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
21b60 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
21b70 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
21b80 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
21b90 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
21ba0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
21bb0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
21bc0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
21bd0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
21be0 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
21bf0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
21c00 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
21c10 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
21c20 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
21c30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
21c40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21c50 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
21c60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
21c70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21c80 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
21c90 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21ca0 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
21cb0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
21cc0 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
21cd0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
21ce0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21cf0 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
21d00 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
21d10 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
21d20 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
21d30 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
21d40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21d50 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
21d60 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
21d70 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
21d80 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
21d90 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
21da0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21db0 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
21dc0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
21dd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
21de0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
21df0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
21e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
21e10 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
21e20 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
21e30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21e40 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
21e50 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
21e60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
21e70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
21e80 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
21e90 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
21ea0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
21eb0 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
21ec0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
21ed0 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
21ee0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
21ef0 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
21f00 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
21f10 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
21f20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21f30 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
21f40 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
21f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21f60 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
21f70 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
21f80 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
21f90 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
21fa0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
21fb0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
21fc0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
21fd0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
21fe0 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
21ff0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
22000 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
22010 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
22020 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
22030 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
22040 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
22050 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
22060 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
22070 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
22080 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
22090 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
220a0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
220b0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
220c0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
220d0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
220e0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
220f0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
22100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
22110 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
22120 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
22130 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
22140 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
22150 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
22160 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
22170 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22180 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
22190 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
221a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
221b0 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
221c0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
221d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
221e0 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
221f0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
22200 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22210 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
22220 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
22230 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
22240 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
22250 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
22260 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
22270 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22280 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
22290 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
222a0 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
222b0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
222c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
222d0 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
222e0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
222f0 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
22300 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
22310 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
22320 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
22330 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
22340 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
22350 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
22360 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
22370 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
22380 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
22390 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
223a0 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
223b0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
223c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
223d0 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28  mmitTransaction(
223e0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
223f0 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61  lite3RollbackTra
22400 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
22410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
22420 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
22430 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
22440 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
22450 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
22460 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
22470 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
22480 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
22490 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
224a0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
224b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
224c0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
224d0 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
224e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
224f0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
22500 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tion(Expr*);.int
22510 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
22520 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
22530 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22540 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
22550 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
22560 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
22570 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
22580 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
22590 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
225a0 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
225b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
225c0 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
225d0 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  te(Parse*,Table*
225e0 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
225f0 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
22600 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22610 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
22620 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
22630 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
22640 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
22650 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
22660 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
22670 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
22680 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
22690 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
226a0 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
226b0 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
226c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
226d0 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
226e0 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
226f0 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
22700 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29   u8,u8,int,int*)
22740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
22750 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
22760 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
22770 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
22780 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
22790 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
227a0 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
227b0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
227c0 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
227d0 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
227e0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
227f0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
22800 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22810 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
22820 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
22830 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
22840 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
22850 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
22860 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
22870 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
22880 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
22890 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
228a0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
228b0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
228c0 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
228d0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
228e0 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
228f0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
22900 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
22910 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
22920 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
22930 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
22940 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
22950 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
22960 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
22970 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
22980 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
22990 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
229a0 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
229b0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
229c0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
229d0 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ct*,int);.void s
229e0 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
229f0 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
22a00 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
22a10 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
22a20 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
22a30 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
22a40 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  nt,int,u8,u8);.v
22a50 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
22a60 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
22a70 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
22a80 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
22a90 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
22aa0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
22ab0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
22ac0 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
22ad0 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
22ae0 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
22af0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
22b00 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
22b10 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
22b20 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
22b30 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
22b40 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
22b50 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22b60 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
22b70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22b80 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
22b90 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
22ba0 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
22bb0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
22bc0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
22bd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22be0 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
22bf0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
22c00 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
22c10 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
22c20 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
22c30 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c50 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
22c60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
22c70 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
22c80 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
22c90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
22ca0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
22cb0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
22cc0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
22cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
22ce0 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
22cf0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
22d00 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
22d10 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
22d20 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
22d30 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
22d40 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
22d50 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
22d60 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
22d70 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
22d80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
22d90 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
22da0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
22db0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22dc0 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22de0 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
22df0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22e00 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
22e10 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
22e20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
22e30 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
22e40 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22e50 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
22e60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22e70 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
22e80 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
22e90 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
22ea0 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
22eb0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
22ec0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
22ed0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
22ee0 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
22ef0 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
22f00 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
22f10 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
22f20 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
22f30 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75         Select*,u
22f70 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
22f80 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
22f90 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
22fa0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
22fb0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
22fc0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
22fd0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
22fe0 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74  DeleteStep(sqlit
22ff0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  e3*,Token*, Expr
23000 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
23010 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
23020 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
23030 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
23040 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
23050 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
23060 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
23070 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
23080 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
23090 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
230a0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
230b0 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
230c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
230d0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
230e0 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
230f0 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
23100 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23  l : (p)).#else.#
23110 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
23120 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
23130 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
23140 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
23150 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
23160 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
23170 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
23180 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23190 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
231a0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
231b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
231c0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
231d0 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
231e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
231f0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
23200 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
23210 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
23220 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
23230 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
23240 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
23250 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
23260 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
23270 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
23280 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
23290 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
232a0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
232b0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
232c0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
232d0 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
232e0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
232f0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
23300 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
23310 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
23320 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
23330 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
23340 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
23350 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
23360 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
23370 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
23380 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
23390 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
233a0 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
233b0 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
233c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
233d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
233e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
233f0 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
23400 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
23410 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
23420 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
23430 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
23440 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
23450 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
23460 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
23470 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
23480 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
23490 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
234a0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
234b0 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
234c0 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
234d0 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
234e0 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
234f0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
23500 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
23510 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23520 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
23530 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
23540 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23550 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
23560 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
23570 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
23580 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
23590 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
235a0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
235b0 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
235c0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
235d0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
235e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
235f0 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
23600 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
23610 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
23620 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
23630 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23640 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
23650 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
23660 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
23670 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
23680 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
23690 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
236a0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
236b0 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
236c0 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
236d0 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
236e0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
236f0 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
23700 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
23710 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23720 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
23730 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
23740 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
23750 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
23760 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
23770 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
23780 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
23790 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
237a0 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
237b0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
237c0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
237d0 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
237e0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
237f0 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
23800 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
23810 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23820 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
23830 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
23840 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
23850 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  dif.u64 sqlite3L
23860 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
23870 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
23880 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
23890 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
238a0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
238b0 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
238c0 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
238d0 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
238e0 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
238f0 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
23900 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20  util.c.** file. 
23910 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65   Code should use
23920 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73   the MACRO forms
23930 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56   below, as the V
23940 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73  arint32 versions
23950 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f  .** are coded to
23960 20 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67   assume the sing
23970 6c 65 20 62 79 74 65 20 63 61 73 65 20 69 73 20  le byte case is 
23980 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20  already handled 
23990 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d  (which .** the M
239a0 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e  ACRO form does).
239b0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
239c0 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
239d0 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69  d char*, u64);.i
239e0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
239f0 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63  int32(unsigned c
23a00 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73  har*, u32);.u8 s
23a10 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
23a20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
23a30 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
23a40 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
23a50 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
23a60 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
23a70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
23a80 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
23a90 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64  ../*.** The head
23aa0 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64 20 63  er of a record c
23ab0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 65 71  onsists of a seq
23ac0 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65 2d 6c  uence variable-l
23ad0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 0a  ength integers..
23ae0 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67 65 72  ** These integer
23af0 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77  s are almost alw
23b00 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72  ays small and ar
23b10 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61 20 73  e encoded as a s
23b20 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54  ingle byte..** T
23b30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
23b40 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e 74 61  ros take advanta
23b50 67 65 20 74 68 69 73 20 66 61 63 74 20 74 6f 20  ge this fact to 
23b60 70 72 6f 76 69 64 65 20 61 20 66 61 73 74 20 65  provide a fast e
23b70 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63  ncode.** and dec
23b80 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  ode of the integ
23b90 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72 64 20  ers in a record 
23ba0 68 65 61 64 65 72 2e 20 20 49 74 20 69 73 20 66  header.  It is f
23bb0 61 73 74 65 72 20 66 6f 72 20 74 68 65 20 63 6f  aster for the co
23bc0 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65  mmon.** case whe
23bd0 72 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  re the integer i
23be0 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  s a single byte.
23bf0 20 20 49 74 20 69 73 20 61 20 6c 69 74 74 6c 65    It is a little
23c00 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74 68 65   slower when the
23c10 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73 20 74  .** integer is t
23c20 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73  wo or more bytes
23c30 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c 20 69  .  But overall i
23c40 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a  t is faster..**.
23c50 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
23c60 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
23c70 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a   equivalent:.**.
23c80 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74  **     x = sqlit
23c90 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 20 41  e3GetVarint32( A
23ca0 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78  , &B );.**     x
23cb0 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56 61 72   = sqlite3PutVar
23cc0 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a  int32( A, B );.*
23cd0 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67 65 74  *.**     x = get
23ce0 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29  Varint32( A, B )
23cf0 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70 75 74  ;.**     x = put
23d00 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29  Varint32( A, B )
23d10 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ;.**.*/.#define 
23d20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  getVarint32(A,B)
23d30 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29    \.  (u8)((*(A)
23d40 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d  <(u8)0x80)?((B)=
23d50 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c  (u32)*(A)),1:sql
23d60 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
23d70 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29  (A),(u32 *)&(B))
23d80 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  ).#define putVar
23d90 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
23da0 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
23db0 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d  u32)0x80)?(*(A)=
23dc0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
23dd0 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65  B)),1:\.  sqlite
23de0 33 50 75 74 56 61 72 69 6e 74 33 32 28 28 41 29  3PutVarint32((A)
23df0 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
23e00 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
23e10 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
23e20 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
23e30 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
23e40 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
23e50 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
23e60 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c  inityStr(Vdbe *,
23e70 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20   Index *);.void 
23e80 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
23e90 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
23ea0 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
23eb0 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
23ec0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
23ed0 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
23ee0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
23ef0 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
23f00 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
23f10 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
23f20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
23f30 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
23f40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
23f50 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
23f60 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
23f70 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
23f80 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
23f90 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
23fa0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
23fb0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
23fc0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
23fd0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
23fe0 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
23ff0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
24000 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
24010 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
24020 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
24030 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
24040 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
24050 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
24060 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
24070 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73  LITE_TEST) .cons
24080 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
24090 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
240a0 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
240b0 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
240c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
240d0 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
240e0 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
240f0 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
24100 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
24110 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
24120 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
24130 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
24140 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
24150 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
24160 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
24170 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
24180 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
24190 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
241a0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
241b0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
241c0 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
241d0 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
241e0 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
241f0 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
24200 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
24210 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
24220 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
24230 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
24240 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
24250 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
24260 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
24270 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
24280 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
24290 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
242a0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
242b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
242c0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
242d0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
242e0 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
242f0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
24300 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
24310 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
24320 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
24330 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
24340 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
24350 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
24360 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
24370 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
24380 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
24390 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
243a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
243b0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
243c0 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
243d0 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
243e0 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b  st char *z,int);
243f0 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
24400 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
24410 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
24420 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
24430 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
24440 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
24450 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
24460 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
24470 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
24480 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
244b0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
244c0 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
244d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
244e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
244f0 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
24500 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
24510 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
24520 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
24530 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24540 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
24550 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
24560 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
24570 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
24580 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
24590 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
245a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
245b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
245c0 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
245d0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
245e0 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
245f0 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
24600 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
24610 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
24620 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
24630 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
24640 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
24650 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
24660 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
24670 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
24680 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
24690 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
246a0 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
246b0 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
246c0 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
246d0 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
246e0 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
246f0 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53  Config;.extern S
24700 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65  QLITE_WSD FuncDe
24710 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f  fHash sqlite3Glo
24720 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  balFunctions;.#i
24730 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24740 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
24750 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
24760 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
24770 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
24780 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
24790 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
247a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
247b0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
247c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
247d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
247e0 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
247f0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
24800 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
24810 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
24820 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
24830 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
24840 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
24850 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
24860 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
24870 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
24880 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
24890 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
248a0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
248b0 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
248c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
248d0 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
248e0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  se *, Expr *, in
248f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24900 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
24910 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
24920 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
24930 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
24940 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
24950 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24960 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
24970 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
24980 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
24990 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
249a0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
249b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
249c0 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
249d0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
249e0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
249f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
24a00 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
24a10 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
24a20 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
24a30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
24a40 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
24a50 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
24a60 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
24a70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
24a80 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
24a90 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
24aa0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
24ab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24ac0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
24ad0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
24ae0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
24af0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
24b00 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
24b10 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
24b20 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
24b30 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
24b40 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
24b50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
24b60 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
24b70 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
24b80 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
24b90 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
24ba0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
24bb0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
24bc0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
24bd0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
24be0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
24bf0 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
24c00 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
24c10 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
24c20 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
24c30 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
24c40 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
24c50 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
24c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
24c70 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
24c80 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
24c90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
24ca0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
24cb0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
24cc0 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
24cd0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
24ce0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24cf0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
24d00 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
24d10 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
24d20 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
24d30 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
24d40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
24d50 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
24d60 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
24d70 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
24d80 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
24d90 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
24da0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
24db0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
24dc0 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
24dd0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
24de0 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
24df0 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
24e00 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
24e10 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
24e20 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
24e30 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
24e40 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
24e50 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
24e60 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
24e70 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
24e80 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
24e90 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
24ea0 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
24eb0 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
24ec0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
24ed0 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
24ee0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
24ef0 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
24f00 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
24f10 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
24f20 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
24f30 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
24f40 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
24f50 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
24f60 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
24f70 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
24f80 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
24f90 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
24fa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
24fb0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
24fc0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24fd0 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
24fe0 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
24ff0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
25000 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
25010 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
25020 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25030 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
25040 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
25050 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
25060 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
25070 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
25080 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
25090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
250a0 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75  endSpace(StrAccu
250b0 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  m*,int);.char *s
250c0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
250d0 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
250e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
250f0 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
25100 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
25110 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
25120 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
25130 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
25140 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
25150 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
25160 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
25170 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
25180 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
25190 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
251a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
251b0 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
251c0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
251d0 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
251e0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
251f0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
25200 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
25210 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
25220 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
25230 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
25240 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
25250 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
25260 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
25270 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  8,int,int*);.int
25280 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
25290 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
252a0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
252b0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
252c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
252d0 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
252e0 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
252f0 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
25300 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
25310 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
25320 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
25330 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ue**);.#endif../
25340 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
25350 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
25360 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
25370 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
25380 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
25390 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a  d*(*)(size_t));.
253a0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
253b0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
253c0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
253d0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
253e0 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
253f0 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
25400 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
25410 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
25420 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
25430 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
25440 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
25450 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
25460 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
25470 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25480 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
25490 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
254a0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
254b0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
254c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
254d0 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
254e0 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
254f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25500 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
25510 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
25520 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
25530 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
25540 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
25550 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
25560 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
25570 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
25580 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
25590 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
255a0 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
255b0 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
255c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
255d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
255e0 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
255f0 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
25600 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25610 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
25620 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
25630 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
25640 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
25650 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
25660 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
25670 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
25680 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
25690 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
256a0 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69  Lock(X) .#  defi
256b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
256c0 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  lock(X).#  defin
256d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
256e0 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65  ockList(X).#  de
256f0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
25700 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20  Savepoint(X, Y, 
25710 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Z) SQLITE_OK.#  
25720 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65  define sqlite3Ge
25730 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28  tVTable(X,Y)  ((
25740 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65  VTable*)0).#else
25750 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
25760 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65  VtabClear(sqlite
25770 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a  3 *db, Table*);.
25780 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
25790 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71  tabDisconnect(sq
257a0 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
257b0 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   *p);.   int sql
257c0 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c  ite3VtabSync(sql
257d0 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29  ite3 *db, Vdbe*)
257e0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
257f0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
25800 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
25810 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
25820 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
25830 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
25840 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
25850 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
25860 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
25870 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
25880 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
25890 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
258a0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
258b0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73  3VtabSavepoint(s
258c0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69  qlite3 *, int, i
258d0 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  nt);.   void sql
258e0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
258f0 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69  rmsg(Vdbe*, sqli
25900 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56  te3_vtab*);.   V
25910 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65  Table *sqlite3Ge
25920 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  tVTable(sqlite3*
25930 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65  , Table*);.#  de
25940 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
25950 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
25960 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
25970 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
25980 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
25990 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
259a0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
259b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
259c0 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
259d0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
259e0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
259f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25a00 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
25a10 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
25a20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25a30 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
25a40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25a50 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
25a60 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
25a70 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
25a80 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
25a90 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
25aa0 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
25ab0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
25ac0 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
25ad0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
25ae0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
25af0 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
25b00 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
25b10 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25b20 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
25b30 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
25b40 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
25b50 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
25b60 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
25b70 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
25b80 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
25b90 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
25ba0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
25bb0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
25bc0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
25bd0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
25be0 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
25bf0 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
25c00 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
25c10 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
25c20 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
25c30 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
25c40 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
25c50 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
25c60 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
25c70 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
25c80 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
25c90 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
25ca0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
25cb0 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
25cc0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
25cd0 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
25ce0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
25cf0 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
25d00 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
25d10 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
25d20 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
25d30 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
25d40 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
25d50 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
25d60 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
25d70 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
25d80 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
25d90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
25da0 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
25db0 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
25dc0 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
25dd0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
25de0 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
25df0 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
25e00 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
25e10 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
25e20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25e30 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
25e40 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
25e50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
25e60 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
25e70 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
25e80 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
25e90 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
25ea0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
25eb0 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
25ec0 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
25ed0 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
25ee0 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
25ef0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
25f00 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
25f10 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
25f20 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
25f30 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
25f40 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
25f50 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
25f60 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
25f70 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
25f80 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
25f90 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
25fa0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
25fb0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
25fc0 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
25fd0 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
25fe0 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
25ff0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
26000 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
26010 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
26020 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
26030 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
26040 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
26050 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
26060 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
26070 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20  is .** provided 
26080 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
26090 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
260a0 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
260b0 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
260c0 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
260d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
260e0 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
260f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
26100 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
26110 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
26120 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
26130 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
26140 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
26150 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
26160 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
26170 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
26180 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
26190 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
261a0 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
261b0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
261c0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
261d0 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
261e0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
261f0 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
26200 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
26210 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
26220 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
26230 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
26240 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
26250 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
26260 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
26270 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26280 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
26290 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
262a0 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
262b0 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
262c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
262d0 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
262e0 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
262f0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
26300 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
26310 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
26320 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
26330 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
26340 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
26350 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
26360 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
26370 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
26380 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
26390 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
263a0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
263b0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
263c0 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
263d0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
263e0 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
263f0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
26400 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
26410 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
26420 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
26430 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
26440 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
26450 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
26460 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
26470 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
26480 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
26490 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
264a0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
264b0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
264c0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
264d0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
264e0 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
264f0 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
26500 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
26510 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
26520 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
26530 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
26540 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26550 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
26560 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
26570 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
26580 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
26590 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
265a0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
265b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
265c0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
265d0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
265e0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
265f0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23  lloc().#endif..#
26600 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
26610 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20  ROWID           
26620 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  1.#define IN_IND
26630 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
26640 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f     2.#define IN_
26650 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
26660 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20        3.#define 
26670 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
26680 45 53 43 20 20 20 20 20 20 34 0a 69 6e 74 20 73  ESC      4.int s
26690 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
266a0 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
266b0 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65  *, int*);..#ifde
266c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
266d0 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69  ATOMIC_WRITE.  i
266e0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
266f0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
26700 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
26710 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
26720 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
26730 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
26740 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
26750 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  fs *);.  int sql
26760 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
26770 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
26780 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26790 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71  JournalExists(sq
267a0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
267b0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
267c0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
267d0 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29  ze(pVfs) ((pVfs)
267e0 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64  ->szOsFile).  #d
267f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
26800 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a  rnalExists(p) 1.
26810 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
26820 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70  ite3MemJournalOp
26830 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  en(sqlite3_file 
26840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
26850 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f  emJournalSize(vo
26860 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
26870 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c  IsMemJournal(sql
26880 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23  ite3_file *);..#
26890 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
268a0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69  PR_DEPTH>0.  voi
268b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
268c0 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50  Height(Parse *pP
268d0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
268e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
268f0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
26900 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
26910 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
26920 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
26930 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
26940 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53  ine sqlite3ExprS
26950 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20  etHeight(x,y).  
26960 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
26970 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
26980 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
26990 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
269a0 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
269b0 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
269c0 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
269d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
269e0 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
269f0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26a00 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
26a10 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
26a20 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
26a30 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
26a40 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
26a50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
26a60 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
26a70 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
26a80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
26a90 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
26aa0 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
26ab0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26ac0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
26ad0 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
26ae0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
26af0 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
26b00 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26b10 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
26b20 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
26b30 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26b40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
26b50 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
26b60 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
26b70 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
26b80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
26b90 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
26ba0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
26bb0 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
26bc0 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
26bd0 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
26be0 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
26bf0 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
26c00 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
26c10 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53  es. .*/.#ifdef S
26c20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
26c30 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
26c40 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
26c50 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
26c60 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
26c70 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
26c80 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
26c90 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
26ca0 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71  EXTERN void (*sq
26cb0 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f  lite3IoTrace)(co
26cc0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
26cd0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
26ce0 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69  OTRACE(A).# defi
26cf0 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  ne sqlite3VdbeIO
26d00 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64  TraceSql(X).#end
26d10 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
26d20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61  routines are ava
26d30 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d  ilable for the m
26d40 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20  em2.c debugging 
26d50 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
26d60 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20  .** only.  They 
26d70 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  are used to veri
26d80 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e  fy that differen
26d90 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d  t "types" of mem
26da0 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  ory.** allocatio
26db0 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20  ns are properly 
26dc0 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73  tracked by the s
26dd0 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ystem..**.** sql
26de0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
26df0 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22  ype() sets the "
26e00 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f  type" of an allo
26e10 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66  cation to one of
26e20 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f  .** the MEMTYPE_
26e30 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
26e40 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70   below.  The typ
26e50 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d  e must be a bitm
26e60 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69  ask with.** a si
26e70 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a  ngle bit set..**
26e80 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
26e90 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74  bugHasType() ret
26ea0 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79  urns true if any
26eb0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
26ec0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
26ed0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
26ee0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
26ef0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
26f00 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
26f10 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  ()..** sqlite3Me
26f20 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
26f30 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  is intended for 
26f40 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72  use inside asser
26f50 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  t() statements..
26f60 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
26f70 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65  debugNoType() re
26f80 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f  turns true if no
26f90 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ne of the bits i
26fa0 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
26fb0 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
26fc0 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
26fd0 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
26fe0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
26ff0 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68  pe()..**.** Perh
27000 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70  aps the most imp
27010 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20  ortant point is 
27020 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  the difference b
27030 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48  etween MEMTYPE_H
27040 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59  EAP.** and MEMTY
27050 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49  PE_LOOKASIDE.  I
27060 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
27070 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  is MEMTYPE_LOOKA
27080 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73  SIDE, that means
27090 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76  .** it might hav
270a0 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
270b0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65   by lookaside, e
270c0 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61  xcept the alloca
270d0 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20  tion was.** too 
270e0 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69  large or lookasi
270f0 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66  de was already f
27100 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  ull.  It is impo
27110 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a  rtant to verify.
27120 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69  ** that allocati
27130 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68  ons that might h
27140 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69  ave been satisfi
27150 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20  ed by lookaside 
27160 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65  are not.** passe
27170 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f  d back to non-lo
27180 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
27190 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74  outines.  Assert
271a0 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a  s such as the.**
271b0 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61   example above a
271c0 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65  re placed on the
271d0 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
271e0 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74  ree() routines t
271f0 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73  o verify.** this
27200 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a   constraint. .**
27210 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
27220 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
27230 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
27240 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
27250 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
27260 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
27270 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
27280 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
27290 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
272a0 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
272b0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
272c0 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
272d0 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
272e0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
272f0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
27300 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
27310 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
27320 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
27330 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
27340 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
27350 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
27360 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
27370 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
27380 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
27390 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
273a0 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
273b0 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
273c0 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
273d0 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
273e0 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
273f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
27400 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
27410 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68 61  x02  /* Might ha
27420 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
27430 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66  e memory */.#def
27440 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41  ine MEMTYPE_SCRA
27450 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20  TCH    0x04  /* 
27460 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69  Scratch allocati
27470 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
27480 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
27490 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20    0x08  /* Page 
274a0 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
274b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
274c0 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20 20  TYPE_DB         
274d0 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73 71  0x10  /* Uses sq
274e0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e  lite3DbMalloc, n
274f0 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  ot sqlite_malloc
27500 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f   */..#endif /* _
27510 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.