/ Hex Artifact Content
Login

Artifact 1977f44283be0d3b40da315fb4fd9e21c79fadcc:


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 69 6e  edef struct Prin
6b60: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
6b70: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
6b80: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6b90: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6ba0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6bb0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6bc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6bd0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6be0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6bf0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
6c00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c10: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
6c20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c30: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
6c40: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
6c50: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
6c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c70: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
6c80: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6c90: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6ca0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cb0: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6cc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cd0: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6ce0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6cf0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
6d00: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
6d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
6d20: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
6d30: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
6d40: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
6d50: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
6d60: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
6d70: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
6d80: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6d90: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6da0: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6db0: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
6dc0: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
6dd0: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
6de0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
6df0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
6e00: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
6e10: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
6e20: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
6e30: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
6e40: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
6e50: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
6e60: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
6e70: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
6e80: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
6e90: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
6ea0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
6eb0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
6ec0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
6ed0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
6ee0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
6ef0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
6f00: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
6f10: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
6f20: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
6f30: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
6f40: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
6f50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6f60: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
6f70: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
6f80: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
6f90: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
6fa0: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
6fb0: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
6fc0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
6fd0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
6fe0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
6ff0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7000: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7010: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
7020: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
7030: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
7040: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
7050: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
7060: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
7070: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
7080: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
7090: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
70a0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
70b0: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
70c0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
70d0: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
70e0: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
70f0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
7100: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
7110: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
7120: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
7130: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
7140: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
7150: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
7160: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
7170: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7180: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
7190: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
71a0: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
71b0: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
71c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
71d0: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
71e0: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
71f0: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
7200: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
7210: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
7220: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
7230: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
7240: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
7250: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
7260: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
7270: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
7280: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
7290: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
72a0: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
72b0: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
72c0: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
72d0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
72e0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
72f0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
7300: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
7310: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
7320: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
7330: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
7340: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
7350: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
7360: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
7370: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
7380: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
7390: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
73a0: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
73b0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
73c0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
73d0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
73e0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
73f0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
7400: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7410: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
7420: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
7430: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
7440: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
7450: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
7460: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
7470: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
7480: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
7490: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
74a0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
74b0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
74c0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
74d0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
74e0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
74f0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
7500: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
7510: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
7520: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
7530: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
7540: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
7550: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7560: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
7570: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7580: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
7590: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
75a0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
75b0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
75c0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
75d0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
75e0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
75f0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
7600: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
7610: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
7620: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
7630: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
7640: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
7650: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
7660: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
7670: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
7680: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
7690: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
76a0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
76b0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
76d0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
76e0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
76f0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  se */.  u16 flag
7700: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
7710: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
7720: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
7730: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
7740: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
7750: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
7760: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
7770: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
7780: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
7790: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
77a0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
77b0: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
77c0: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
77d0: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
77e0: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
77f0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
7800: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
7810: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  ma->flags&(P))==
7820: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
7830: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
7840: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
7850: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
7860: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7870: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7880: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7890: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
78a0: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
78b0: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
78c0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
78d0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
78e0: 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  a->flags&=~(P)..
78f0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
7900: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
7910: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
7920: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
7930: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
7940: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
7950: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
7960: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
7970: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
7980: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
7990: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
79a0: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
79b0: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
79c0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
79d0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
79e0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
79f0: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
7a00: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
7a10: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
7a20: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
7a30: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
7a40: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
7a50: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
7a60: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
7a70: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
7a80: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
7a90: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
7aa0: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
7ab0: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
7ac0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
7ad0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
7ae0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
7af0: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
7b00: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
7b10: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
7b20: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
7b30: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
7b40: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
7b50: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
7b60: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
7b70: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
7b80: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
7b90: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
7ba0: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
7bb0: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
7bc0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
7bd0: 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a  GER_DEPTH+1)../*
7be0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
7bf0: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
7c00: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
7c10: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
7c20: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
7c30: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
7c40: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
7c50: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
7c60: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
7c70: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
7c80: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7c90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7ca0: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
7cb0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
7cc0: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
7cd0: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
7ce0: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
7cf0: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
7d00: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
7d10: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
7d20: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
7d30: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
7d40: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
7d50: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
7d60: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
7d70: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
7d80: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
7d90: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7da0: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
7db0: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
7dc0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
7dd0: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
7de0: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
7df0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
7e00: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
7e10: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
7e20: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
7e30: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
7e40: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
7e50: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
7e60: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
7e70: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
7e80: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7e90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7ea0: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
7eb0: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
7ec0: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
7ed0: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
7ee0: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
7ef0: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
7f00: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
7f10: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
7f20: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
7f30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
7f40: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
7f50: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
7f60: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
7f70: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
7f80: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
7f90: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
7fa0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
7fb0: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
7fc0: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
7fd0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
7fe0: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
7ff0: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
8000: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
8010: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
8020: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
8030: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
8040: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
8050: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
8060: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
8070: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8080: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
8090: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
80a0: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
80b0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
80c0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
80d0: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
80e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
80f0: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
8100: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
8110: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
8120: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
8130: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
8140: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
8150: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
8160: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
8170: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
8180: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
8190: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
81a0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
81b0: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
81c0: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
81d0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
81e0: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
81f0: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
8200: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
8210: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
8220: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
8230: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
8240: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
8250: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
8260: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
8270: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
8280: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
8290: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
82a0: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
82b0: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
82c0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
82d0: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
82e0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
82f0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
8300: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
8310: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
8320: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
8330: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
8340: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
8350: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
8360: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
8370: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
8380: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
8390: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
83a0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
83b0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
83c0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
83d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
83e0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
83f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8400: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
8410: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
8420: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
8430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8440: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
8450: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
8460: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
8470: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
8480: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
8490: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
84a0: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
84b0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
84c0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
84d0: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
84e0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
84f0: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
8500: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
8510: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
8520: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
8530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
8540: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
8550: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8570: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
8580: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
8590: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
85a0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
85b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
85c0: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
85d0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
85e0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8600: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
8610: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
8620: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
8630: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
8640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
8650: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
8660: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
8670: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
8680: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
8690: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
86a0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
86b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
86c0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
86d0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
86e0: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
86f0: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
8700: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8720: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
8730: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
8740: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
8750: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8770: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
8780: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
8790: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
87a0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
87b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
87c0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
87d0: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
87e0: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
87f0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
8800: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
8810: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
8820: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
8830: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
8840: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
8850: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
8860: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
8870: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
8880: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
8890: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
88a0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
88b0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
88c0: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
88d0: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
88e0: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
88f0: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
8900: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
8910: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
8920: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
8930: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
8940: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
8950: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
8960: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
8970: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
8980: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
8990: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
89a0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
89b0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
89c0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
89d0: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
89e0: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
89f0: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
8a00: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
8a10: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
8a20: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a40: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
8a50: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
8a60: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
8a70: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
8aa0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
8ab0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
8ac0: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
8ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
8ae0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
8af0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
8b00: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
8b10: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
8b20: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
8b30: 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  mits */.  struct
8b40: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
8b50: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
8b60: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
8b70: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
8b80: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
8b90: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
8ba0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
8bb0: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
8bc0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
8bd0: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8bf0: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
8c00: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
8c10: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
8c20: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
8c30: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
8c40: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
8c50: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
8c60: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
8c70: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
8c80: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
8c90: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
8ca0: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
8cb0: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
8cc0: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
8cd0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8ce0: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
8cf0: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
8d00: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d20: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
8d30: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
8d40: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
8d50: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d70: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
8d80: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
8d90: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
8da0: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8dc0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
8dd0: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
8de0: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
8df0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
8e00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8e10: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
8e20: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
8e30: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
8e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8e50: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
8e60: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
8e70: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
8e80: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
8e90: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
8ea0: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
8eb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
8ec0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8ee0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
8ef0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
8f00: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
8f10: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
8f20: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
8f30: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
8f40: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8f50: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8f80: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
8f90: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
8fa0: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
8fb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8fc0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
8fd0: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
8fe0: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
8ff0: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
9000: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
9010: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9020: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
9030: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
9040: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9050: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
9060: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
9070: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
9080: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
9090: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
90a0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
90b0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
90c0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
90d0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
90e0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
90f0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9100: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
9110: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
9120: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
9130: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
9140: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
9150: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
9160: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
9170: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
9180: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
9190: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
91a0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
91b0: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
91c0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
91d0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
91e0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
91f0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
9200: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
9210: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
9220: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
9230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
9240: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
9250: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
9260: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
9270: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
9280: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
9290: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
92a0: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
92b0: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
92c0: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
92d0: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
92e0: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
92f0: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
9300: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
9310: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
9320: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
9330: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9340: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
9350: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
9360: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
9370: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
9380: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9390: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
93c0: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
93d0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
93e0: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9400: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
9410: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
9420: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
9430: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
9440: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
9450: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
9460: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
9470: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
9480: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
9490: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
94a0: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
94b0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
94c0: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
94d0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
94e0: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
94f0: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
9500: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
9510: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
9520: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
9530: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
9540: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
9550: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
9560: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
9570: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
9580: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
9590: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
95a0: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
95b0: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
95c0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
95d0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
95e0: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
95f0: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
9600: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
9610: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
9620: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
9630: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9650: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
9660: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
9670: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
9680: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
9690: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
96a0: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
96b0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
96c0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
96d0: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
96e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
96f0: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
9700: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
9710: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
9720: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
9730: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
9740: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
9750: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
9760: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
9770: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
9780: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
9790: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
97a0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
97b0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
97c0: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
97d0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
97e0: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
97f0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
9800: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
9810: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
9820: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
9830: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
9840: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
9850: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
9860: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
9870: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9880: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
9890: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
98a0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
98b0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
98c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
98d0: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
98e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
98f0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
9900: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
9910: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
9920: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
9930: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
9940: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
9950: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
9960: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
9970: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
9980: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
9990: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
99b0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
99c0: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
99d0: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
99e0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
99f0: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
9a00: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
9a10: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
9a20: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
9a30: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
9a40: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
9a50: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
9a60: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
9a70: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
9a80: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
9a90: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
9aa0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
9ab0: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
9ac0: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
9ad0: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
9ae0: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
9af0: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
9b00: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
9b10: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
9b20: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
9b30: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
9b40: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
9b50: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
9b60: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
9b70: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
9b80: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
9b90: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
9ba0: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
9bb0: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
9bc0: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
9bd0: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
9be0: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
9bf0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9c00: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
9c10: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
9c20: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
9c30: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
9c40: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
9c50: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9c70: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
9c80: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
9c90: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
9ca0: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
9cb0: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
9cc0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
9cd0: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
9ce0: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
9cf0: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
9d00: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
9d10: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
9d20: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
9d30: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
9d40: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
9d50: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
9d60: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
9d70: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
9d80: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
9d90: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9da0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9db0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
9dc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
9dd0: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
9de0: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
9df0: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
9e00: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
9e10: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
9e20: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
9e30: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
9e40: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
9e50: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9e60: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
9e70: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
9e80: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
9e90: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9ea0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9eb0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9ec0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
9ed0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9ee0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9ef0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9f00: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
9f10: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
9f20: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
9f30: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
9f40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
9f50: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
9f60: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
9f70: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
9f80: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
9f90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
9fa0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
9fb0: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
9fc0: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
9fd0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
9fe0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9ff0: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
a000: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
a010: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
a020: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a050: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
a060: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
a070: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0a0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
a0b0: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
a0c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a0d0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
a0e0: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
a0f0: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
a100: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
a110: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
a140: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
a150: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
a160: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
a170: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
a180: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
a190: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
a1a0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
a1b0: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
a1c0: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
a1d0: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
a1e0: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
a1f0: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
a200: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
a210: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
a220: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
a230: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
a240: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a250: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
a260: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
a270: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
a280: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
a290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a2a0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
a2b0: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
a2c0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
a2d0: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
a2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a2f0: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
a300: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
a310: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
a320: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
a330: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
a340: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
a350: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
a360: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
a370: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
a380: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
a390: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
a3a0: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
a3b0: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
a3c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
a3d0: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
a3e0: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
a3f0: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
a400: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
a410: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
a420: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
a430: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
a440: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
a450: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a460: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
a470: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
a480: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
a490: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
a4a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a4b0: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
a4c0: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
a4d0: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
a4e0: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
a4f0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
a500: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
a510: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
a520: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
a530: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
a540: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
a550: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
a560: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
a570: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
a580: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
a590: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
a5a0: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
a5b0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
a5c0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
a5d0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
a5e0: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
a5f0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
a600: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
a610: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
a620: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
a630: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
a640: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
a650: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
a660: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
a670: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
a680: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
a690: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
a6a0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
a6b0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
a6c0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
a6d0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
a6e0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
a6f0: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
a700: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
a710: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
a720: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
a730: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
a740: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
a750: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
a760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
a770: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
a780: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
a790: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
a7a0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
a7b0: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
a7c0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
a7d0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
a7e0: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
a7f0: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
a800: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
a810: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
a820: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
a830: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
a840: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
a850: 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20  ctoring */./*   
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74               not
a870: 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20   used    0x0010 
a880: 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45    // Was: SQLITE
a890: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f  _IdxRealAsInt */
a8a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a8b0: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
a8c0: 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49  x0020   /* DISTI
a8d0: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
a8e0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
a8f0: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
a900: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43     0x0040   /* C
a910: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
a920: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
a930: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
a940: 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a  Join 0x0080   /*
a950: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
a960: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
a970: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
a980: 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78  ubqCoroutine  0x
a990: 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61  0100   /* Evalua
a9a0: 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73  te subqueries as
a9b0: 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23   coroutines */.#
a9c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
a9d0: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
a9e0: 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  200   /* Transit
a9f0: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
aa00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
aa10: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
aa20: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0400   /* Omi
aa30: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
aa40: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
aa50: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
aa60: 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30            0x0800
aa70: 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 53 51     /* Use the SQ
aa80: 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62 6c 65  LITE_STAT3 table
aa90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aaa0: 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73 74 20  TE_AdjustOutEst 
aab0: 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 41 64    0x1000   /* Ad
aac0: 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73 74 69  just output esti
aad0: 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48 45 52  mates using WHER
aae0: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
aaf0: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
ab00: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
ab10: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
ab20: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
ab30: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
ab40: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
ab50: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
ab60: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
ab70: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
ab80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
ab90: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
aba0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
abb0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
abc0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
abd0: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
abe0: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
abf0: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
ac00: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
ac10: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
ac20: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
ac30: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
ac40: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
ac50: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
ac60: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
ac70: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
ac80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
ac90: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
aca0: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
acb0: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
acc0: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
acd0: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
ace0: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
acf0: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
ad00: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
ad10: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
ad20: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
ad30: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
ad40: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
ad50: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
ad60: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
ad70: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
ad80: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
ad90: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
ada0: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
adb0: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
adc0: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
add0: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
ade0: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
adf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ae00: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
ae10: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
ae20: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
ae30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae40: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
ae50: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
ae60: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
ae70: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
ae80: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
ae90: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
aea0: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
aeb0: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
aec0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
aed0: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
aee0: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
aef0: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
af00: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
af10: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
af20: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
af30: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
af40: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
af50: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
af60: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
af70: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
af80: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
af90: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
afa0: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
afb0: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
afc0: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
afd0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
afe0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
aff0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
b000: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
b010: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
b020: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
b030: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
b040: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
b050: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
b060: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
b070: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
b080: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
b090: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
b0a0: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
b0b0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
b0c0: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
b0d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b0e0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
b0f0: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
b100: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
b110: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
b120: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
b130: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
b140: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
b150: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
b160: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
b170: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
b180: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
b190: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
b1a0: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
b1b0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
b1c0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
b1d0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
b1e0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
b1f0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
b200: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
b210: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
b220: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
b230: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
b240: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
b250: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
b260: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
b270: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
b280: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
b290: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
b2a0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b2b0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
b2c0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
b2d0: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
b2e0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
b2f0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
b300: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
b310: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
b320: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
b330: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
b340: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
b350: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
b360: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
b370: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
b380: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
b390: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
b3a0: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
b3b0: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
b3c0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
b3d0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
b3e0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
b3f0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
b400: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
b410: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
b420: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
b430: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
b440: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
b450: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
b460: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
b470: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
b480: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
b490: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
b4a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
b4b0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
b4c0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
b4d0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
b4e0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
b4f0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
b500: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
b510: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
b520: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
b530: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
b540: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
b550: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
b560: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
b570: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
b580: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
b590: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
b5a0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
b5b0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
b5c0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
b5d0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
b5e0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
b5f0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
b600: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
b610: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
b620: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
b630: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
b640: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
b650: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
b660: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
b670: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
b680: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
b690: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
b6a0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
b6b0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
b6c0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
b6d0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
b6e0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
b6f0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
b700: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
b710: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
b720: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
b730: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
b740: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
b750: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
b760: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
b770: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
b780: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
b790: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
b7a0: 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20  CMASK  0x003 /* 
b7b0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
b7c0: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
b7d0: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
b7e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
b7f0: 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20  KE     0x004 /* 
b800: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
b810: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
b820: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b830: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
b840: 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73      0x008 /* Cas
b850: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
b860: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
b870: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b880: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
b890: 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  x010 /* Ephemera
b8a0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
b8b0: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
b8c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
b8d0: 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71  COLL 0x020 /* sq
b8e0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
b8f0: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
b900: 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  alled */.#define
b910: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
b920: 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42  GTH   0x040 /* B
b930: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
b940: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
b950: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b960: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30 20  _TYPEOF   0x080 
b970: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
b980: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
b990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9a0: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
b9b0: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
b9c0: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
b9d0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
b9e0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
b9f0: 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c  CE 0x200 /* Buil
ba00: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
ba10: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
ba20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ba30: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30  NC_UNLIKELY 0x40
ba40: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
ba50: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
ba60: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ba70: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ba80: 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74  T 0x800 /* Const
ba90: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
baa0: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
bab0: 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  t */../*.** The 
bac0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
bad0: 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
bae0: 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
baf0: 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
bb00: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
bb10: 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
bb20: 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
bb30: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
bb40: 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
bb50: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
bb60: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
bb70: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
bb80: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
bb90: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
bba0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
bbb0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
bbc0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
bbd0: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
bbe0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
bbf0: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
bc00: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
bc10: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
bc20: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
bc30: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
bc40: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
bc50: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
bc60: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
bc70: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
bc80: 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20  tion. If .**    
bc90: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
bca0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
bcb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
bcc0: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
bcd0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
bce0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
bcf0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
bd00: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
bd10: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
bd20: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
bd30: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
bd40: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   flag..**.**   A
bd50: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
bd60: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
bd70: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
bd80: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
bd90: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
bda0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
bdb0: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
bdc0: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
bdd0: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
bde0: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
bdf0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
be00: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
be10: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
be20: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
be30: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
be40: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
be50: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
be60: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
be70: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
be80: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
be90: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
bea0: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
beb0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
bec0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
bed0: 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  e .**     that a
bee0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
bef0: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
bf00: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
bf10: 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20  ll to C .**     
bf20: 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
bf30: 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
bf40: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
bf50: 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
bf60: 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
bf70: 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
bf80: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
bf90: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
bfa0: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
bfb0: 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
bfc0: 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
bfd0: 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
bfe0: 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
bff0: 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
c000: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
c010: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c020: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c030: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
c040: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
c050: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
c060: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
c070: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
c080: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
c090: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
c0a0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c0b0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  , 0}.#define VFU
c0c0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c0d0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c0e0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
c0f0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
c100: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
c110: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
c120: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
c130: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
c140: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c150: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  , 0}.#define FUN
c160: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
c170: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c180: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
c190: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
c1a0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
c1b0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
c1c0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
c1d0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
c1e0: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
c1f0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
c200: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
c210: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
c220: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
c230: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
c240: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
c250: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
c260: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c270: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
c280: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
c290: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
c2a0: 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
c2b0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
c2c0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45   0}.#define LIKE
c2d0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c2e0: 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
c2f0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
c300: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
c310: 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
c320: 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72   \.   (void *)ar
c330: 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20  g, 0, likeFunc, 
c340: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
c350: 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52   0}.#define AGGR
c360: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
c370: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
c380: 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b  p, xFinal) \.  {
c390: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
c3a0: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
c3b0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c3c0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c3d0: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
c3e0: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
c3f0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
c400: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
c410: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
c420: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
c430: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
c440: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
c450: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
c460: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
c470: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
c480: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
c490: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
c4a0: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
c4b0: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
c4c0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
c4d0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
c4e0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
c4f0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
c500: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
c530: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
c540: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
c550: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
c580: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
c590: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
c5a0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c5c0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
c5d0: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
c5e0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
c5f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c600: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
c610: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
c620: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
c630: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
c640: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
c650: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
c660: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
c670: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
c680: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
c690: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
c6a0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
c6b0: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
c6c0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
c6d0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
c6e0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
c6f0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
c700: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
c710: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
c720: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
c730: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
c740: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
c750: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
c760: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
c770: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
c780: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
c790: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
c7a0: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
c7b0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
c7c0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
c7d0: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
c7e0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
c7f0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
c800: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
c810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c820: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
c830: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
c840: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
c850: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
c880: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
c890: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
c8a0: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c8c0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
c8d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
c8e0: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
c8f0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
c900: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
c910: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
c920: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
c930: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
c940: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
c950: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
c960: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
c970: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
c980: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
c990: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c9a0: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
c9b0: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
c9c0: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
c9d0: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
c9e0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
c9f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
ca00: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
ca10: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
ca20: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
ca30: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
ca40: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
ca50: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
ca60: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
ca70: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
ca80: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
ca90: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
caa0: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
cab0: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
cac0: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
cad0: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
cae0: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
caf0: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
cb00: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
cb10: 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  size of this col
cb20: 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a  umn.  INT==1 */.
cb30: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
cb40: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
cb50: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
cb60: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
cb70: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
cb80: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
cb90: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
cba0: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
cbb0: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
cbc0: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
cbd0: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
cbe0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
cbf0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
cc00: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
cc10: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
cc20: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
cc30: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
cc40: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
cc50: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
cc60: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
cc70: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
cc80: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
cc90: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
cca0: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
ccb0: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
ccc0: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
ccd0: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
cce0: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
ccf0: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
cd00: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
cd10: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
cd20: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
cd30: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
cd40: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
cd50: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
cd60: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
cd70: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
cd80: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
cd90: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
cda0: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
cdb0: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
cdc0: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
cdd0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
cde0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
cdf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ce00: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
ce10: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce30: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
ce40: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
ce50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
ce60: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
ce70: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
ce80: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
ce90: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
cea0: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
ceb0: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
cec0: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
ced0: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
cee0: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
cef0: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
cf00: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
cf10: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
cf20: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
cf30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
cf40: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
cf50: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
cf60: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
cf70: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
cf80: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
cf90: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
cfa0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
cfb0: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
cfc0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
cfd0: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
cfe0: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
cff0: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
d000: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
d010: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
d020: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
d030: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
d040: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
d050: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
d060: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
d070: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
d080: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
d090: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
d0a0: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
d0b0: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
d0c0: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 61 27  e begin with 'a'
d0d0: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
d0e0: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
d0f0: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
d100: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
d110: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
d120: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
d130: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
d140: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
d150: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
d160: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
d170: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
d180: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
d190: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
d1a0: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
d1b0: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
d1c0: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
d1d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
d1e0: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
d1f0: 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'a'.#define SQLI
d200: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20  TE_AFF_NONE     
d210: 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'b'.#define SQLI
d220: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
d230: 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'c'.#define SQLI
d240: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
d250: 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'd'.#define SQLI
d260: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
d270: 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'e'..#define sql
d280: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
d290: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
d2a0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d2b0: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
d2c0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
d2d0: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
d2e0: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
d2f0: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
d300: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a  finity value. .*
d310: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d320: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
d330: 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  67../*.** Additi
d340: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
d350: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
d360: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
d370: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
d380: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
d390: 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
d3a0: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
d3b0: 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
d3c0: 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
d3d0: 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
d3e0: 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
d3f0: 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
d400: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d410: 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
d420: 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
d430: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
d440: 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
d450: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
d460: 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
d470: 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
d480: 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
d490: 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
d4a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d4b0: 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d  L   0x08  /* jum
d4c0: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
d4d0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
d4e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d4f0: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 31 30  TOREP2      0x10
d500: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
d510: 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
d520: 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
d530: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d540: 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
d550: 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
d560: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d570: 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
d580: 78 38 38 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x88  /* Assert t
d590: 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
d5a0: 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
d5b0: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
d5c0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
d5d0: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
d5e0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
d5f0: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
d600: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
d610: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
d620: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
d630: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
d640: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
d650: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
d660: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
d670: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
d680: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
d690: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
d6a0: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
d6b0: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
d6c0: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
d6d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
d6e0: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
d6f0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
d700: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
d710: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
d720: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
d730: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
d740: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
d750: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
d760: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
d770: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
d780: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
d790: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
d7a0: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
d7b0: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
d7c0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
d7d0: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
d7e0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
d7f0: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
d800: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
d810: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
d820: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
d830: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
d840: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
d850: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
d860: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
d870: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
d880: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
d890: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
d8a0: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
d8b0: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
d8c0: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
d8d0: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
d8e0: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
d8f0: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
d900: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
d910: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
d920: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
d930: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
d940: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
d950: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
d960: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
d970: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
d980: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
d990: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
d9a0: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
d9b0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
d9c0: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
d9d0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
d9e0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
d9f0: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
da00: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
da10: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
da20: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
da30: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
da40: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
da50: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
da60: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
da70: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
da80: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
da90: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
daa0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
dab0: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
dac0: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
dad0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
dae0: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
daf0: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
db00: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
db10: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
db20: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
db30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
db40: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
db50: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
db60: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
db70: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
db80: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
db90: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
dba0: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
dbb0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
dbc0: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
dbd0: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
dbe0: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
dbf0: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
dc00: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
dc10: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
dc20: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
dc30: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
dc40: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
dc50: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
dc60: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
dc70: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
dc80: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
dc90: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
dca0: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
dcb0: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
dcc0: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
dcd0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
dce0: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
dcf0: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
dd00: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
dd10: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
dd20: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
dd30: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
dd40: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
dd50: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
dd60: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
dd70: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
dd80: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
dd90: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
dda0: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
ddb0: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
ddc0: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
ddd0: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
dde0: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
ddf0: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
de00: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
de10: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
de20: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
de30: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
de40: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
de50: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
de60: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
de70: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
de80: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
de90: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
dea0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
deb0: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
dec0: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
ded0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
dee0: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
def0: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
df00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
df10: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
df20: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
df30: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
df40: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
df50: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
df60: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
df70: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
df80: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
df90: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
dfa0: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
dfb0: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
dfc0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
dfd0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
dfe0: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
dff0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
e000: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
e010: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
e020: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e040: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
e050: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
e060: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
e070: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
e080: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
e090: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
e0a0: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
e0b0: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
e0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
e0d0: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
e0e0: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
e0f0: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
e100: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
e110: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
e120: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
e130: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
e140: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
e150: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
e160: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
e170: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
e180: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
e190: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
e1a0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
e1b0: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
e1c0: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
e1d0: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
e1e0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
e1f0: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
e200: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
e210: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
e220: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
e230: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
e240: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
e250: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
e260: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
e270: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
e280: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
e290: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
e2a0: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
e2b0: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
e2c0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
e2d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
e2e0: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
e2f0: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
e300: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
e310: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
e320: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
e330: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
e340: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
e350: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
e360: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
e370: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
e380: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
e390: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
e3a0: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
e3b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
e3c0: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
e3d0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
e3e0: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
e3f0: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
e400: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
e410: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
e420: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
e430: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
e440: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
e450: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
e460: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
e470: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
e480: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
e490: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
e4a0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
e4b0: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
e4c0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
e4d0: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
e4e0: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
e4f0: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
e500: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
e510: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
e520: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
e530: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
e540: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
e550: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
e560: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
e570: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
e580: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
e590: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
e5a0: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
e5b0: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
e5c0: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
e5d0: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
e5e0: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
e5f0: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
e600: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
e610: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
e620: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
e630: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
e640: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
e650: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
e660: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
e670: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
e680: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
e690: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
e6a0: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
e6b0: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
e6c0: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
e6d0: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
e6e0: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
e6f0: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
e700: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
e710: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
e720: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
e730: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
e740: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
e750: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
e760: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
e770: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
e780: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
e790: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
e7a0: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
e7b0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
e7c0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
e7d0: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
e7e0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
e7f0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
e800: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
e810: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
e820: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
e830: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
e840: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
e850: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
e860: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
e870: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
e880: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
e890: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
e8a0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
e8b0: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
e8c0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
e8d0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
e8e0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
e8f0: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
e900: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
e910: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
e920: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
e930: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
e940: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67   */.#endif.  Log
e950: 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
e960: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
e970: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
e980: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
e990: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
e9a0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
e9b0: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
e9c0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
e9d0: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
e9e0: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
e9f0: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
ea00: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
ea10: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
ea20: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
ea30: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
ea40: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
ea50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
ea60: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
ea70: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ea90: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
eaa0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
eab0: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
eac0: 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
ead0: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
eae0: 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
eaf0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 74   bytes */.  u8 t
eb00: 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
eb10: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
eb20: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
eb30: 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
eb40: 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
eb50: 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
eb60: 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
eb70: 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
eb80: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
eb90: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
eba0: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
ebb0: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
ebc0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
ebd0: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
ebe0: 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
ebf0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ec00: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
ec10: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
ec20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ec30: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
ec40: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
ec50: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
ec60: 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  rg;  /* Text of 
ec70: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
ec80: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
ec90: 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ame */.  VTable 
eca0: 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
ecb0: 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
ecc0: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
ecd0: 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
ece0: 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
ecf0: 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
ed00: 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
ed10: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
ed20: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
ed30: 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
ed40: 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
ed50: 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
ed60: 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
ed70: 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
ed80: 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
ed90: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
eda0: 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
edb0: 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23  e.tabFlags..*/.#
edc0: 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
edd0: 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20  ly        0x01  
ede0: 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
edf0: 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
ee00: 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
ee10: 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20  ral       0x02  
ee20: 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
ee30: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
ee40: 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
ee50: 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a  Key   0x04    /*
ee60: 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   Table has a pri
ee70: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
ee80: 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65  ine TF_Autoincre
ee90: 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f  ment   0x08    /
eea0: 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
eeb0: 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
eec0: 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
eed0: 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20  e TF_Virtual    
eee0: 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
eef0: 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  Is a virtual tab
ef00: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
ef10: 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
ef20: 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72   0x20    /* No r
ef30: 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41  owid used. PRIMA
ef40: 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
ef50: 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  y */.../*.** Tes
ef60: 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
ef70: 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
ef80: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
ef90: 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
efa0: 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
efb0: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
efc0: 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
efd0: 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
efe0: 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
eff0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
f000: 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
f010: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f020: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
f030: 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
f040: 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d  l(X)      (((X)-
f050: 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56  >tabFlags & TF_V
f060: 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64  irtual)!=0).#  d
f070: 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
f080: 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
f090: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
f0a0: 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
f0b0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
f0c0: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
f0d0: 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
f0e0: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
f0f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20  #endif../* Does 
f100: 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
f110: 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
f120: 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
f130: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
f140: 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
f150: 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
f160: 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
f170: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
f180: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
f190: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
f1a0: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
f1b0: 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
f1c0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
f1d0: 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
f1e0: 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
f1f0: 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
f200: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
f210: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
f220: 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
f230: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
f240: 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
f250: 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
f260: 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
f270: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
f280: 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
f290: 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
f2a0: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
f2b0: 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
f2c0: 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
f2d0: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
f2e0: 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
f2f0: 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
f300: 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
f310: 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
f320: 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
f330: 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
f340: 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
f350: 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
f360: 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
f370: 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
f380: 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
f390: 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
f3a0: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
f3b0: 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
f3c0: 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
f3d0: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
f3e0: 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
f3f0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f400: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
f410: 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
f420: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
f430: 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
f440: 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
f450: 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
f460: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
f470: 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
f480: 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
f490: 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
f4a0: 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
f4b0: 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
f4c0: 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
f4d0: 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
f4e0: 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
f4f0: 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
f500: 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
f510: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
f520: 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
f530: 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
f540: 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
f550: 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
f560: 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
f570: 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
f580: 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
f590: 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
f5a0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
f5b0: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
f5c0: 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
f5d0: 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
f5e0: 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
f5f0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
f600: 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
f610: 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
f620: 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
f630: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
f640: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
f650: 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
f660: 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
f670: 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
f680: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
f690: 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
f6a0: 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
f6b0: 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
f6c0: 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
f6d0: 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
f6e0: 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
f6f0: 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
f700: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
f710: 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
f720: 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
f730: 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
f740: 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
f750: 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
f760: 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
f770: 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
f780: 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
f790: 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
f7a0: 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
f7b0: 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
f7c0: 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
f7d0: 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
f7e0: 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
f7f0: 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
f800: 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
f810: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
f820: 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
f830: 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
f840: 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
f850: 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
f860: 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
f870: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
f880: 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
f890: 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
f8a0: 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
f8b0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
f8c0: 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
f8d0: 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
f8e0: 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
f8f0: 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
f900: 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
f910: 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
f920: 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
f930: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
f940: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
f950: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
f960: 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
f970: 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
f980: 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
f990: 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
f9a0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
f9b0: 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
f9c0: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
f9d0: 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
f9e0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
f9f0: 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
fa00: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
fa10: 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
fa20: 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
fa30: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
fa40: 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
fa50: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
fa60: 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
fa70: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
fa80: 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
fa90: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
faa0: 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
fab0: 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
fac0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
fad0: 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
fae0: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
faf0: 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
fb00: 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
fb10: 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
fb20: 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
fb30: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
fb40: 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
fb50: 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
fb60: 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
fb70: 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
fb80: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
fb90: 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
fba0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
fbb0: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
fbc0: 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
fbd0: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
fbe0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
fbf0: 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
fc00: 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
fc10: 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
fc20: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
fc30: 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
fc40: 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
fc50: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
fc60: 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
fc70: 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
fc80: 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
fc90: 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
fca0: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
fcb0: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
fcc0: 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
fcd0: 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
fce0: 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
fcf0: 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
fd00: 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
fd10: 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
fd20: 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
fd30: 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
fd40: 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
fd50: 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
fd60: 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
fd70: 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
fd80: 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
fd90: 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
fda0: 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
fdb0: 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
fdc0: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
fdd0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
fde0: 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
fdf0: 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
fe00: 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
fe10: 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
fe20: 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
fe30: 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
fe40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
fe50: 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
fe60: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
fe70: 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
fe80: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
fe90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
fea0: 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
feb0: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
fec0: 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
fed0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
fee0: 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
fef0: 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
ff00: 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
ff10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
ff20: 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
ff30: 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
ff40: 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
ff50: 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
ff60: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
ff70: 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
ff80: 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
ff90: 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
ffa0: 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
ffb0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
ffc0: 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
ffd0: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
ffe0: 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
fff0: 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
10000 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
10010 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
10020 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
10030 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
10040 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
10050 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
10060 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
10070 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
10080 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
10090 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
100a0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
100b0 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
100c0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
100d0 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
100e0 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
100f0 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
10100 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
10110 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
10120 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
10130 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
10140 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
10150 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
10160 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
10170 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f  fault  10  /* Do
10180 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
10190 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
101a0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
101b0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
101c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
101d0 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
101e0 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
101f0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
10200 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
10210 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
10220 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
10230 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
10240 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
10250 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
10260 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
10270 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
10280 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
10290 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
102a0 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
102b0 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
102c0 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
102d0 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
102e0 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
102f0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
10300 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e  eyInfo {.  u32 n
10310 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ref;           /
10320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65  * Number of refe
10330 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b  rences to this K
10340 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f  eyInfo object */
10350 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
10360 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
10370 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
10380 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
10390 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
103a0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
103b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65   /* Number of ke
103c0 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  y columns in the
103d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20   index */.  u16 
103e0 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20  nXField;        
103f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10400 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20  umns beyond the 
10410 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  key columns */. 
10420 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
10430 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
10440 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
10450 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
10460 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
10470 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
10480 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
10490 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
104a0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
104b0 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
104c0 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
104d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
104e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
104f0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
10500 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
10510 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
10520 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
10530 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
10540 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
10550 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
10560 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
10570 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
10580 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
10590 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
105a0 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
105b0 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
105c0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
105d0 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
105e0 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
105f0 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
10600 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
10610 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
10620 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
10630 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
10640 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
10650 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
10660 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
10670 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
10680 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
10690 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
106a0 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
106b0 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
106c0 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
106d0 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
106e0 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
106f0 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  tuent fields..**
10700 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72  .** The r1 and r
10710 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  2 member variabl
10720 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
10730 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65   by the optimize
10740 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  d comparison.** 
10750 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65  functions vdbeRe
10760 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29  cordCompareInt()
10770 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43   and vdbeRecordC
10780 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a  ompareString()..
10790 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
107a0 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
107b0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
107c0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
107d0 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
107e0 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31  ormation */.  u1
107f0 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
10800 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
10810 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
10820 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
10830 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
10840 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
10850 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
10860 6c 20 2a 2f 0a 20 20 75 38 20 69 73 43 6f 72 72  l */.  u8 isCorr
10870 75 70 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  upt;       /* Co
10880 72 72 75 70 74 69 6f 6e 20 64 65 74 65 63 74 65  rruption detecte
10890 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
108a0 61 72 65 28 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  are() */.  Mem *
108b0 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
108c0 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
108d0 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
108e0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
108f0 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
10900 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10920 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
10930 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
10940 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
10950 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
10960 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
10970 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
10980 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10990 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
109a0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
109b0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
109c0 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
109d0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
109e0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
109f0 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
10a00 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
10a10 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
10a20 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
10a30 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
10a40 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
10a50 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
10a60 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
10a70 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
10a80 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
10a90 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
10aa0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
10ab0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
10ac0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
10ad0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
10ae0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
10af0 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
10b00 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
10b10 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
10b20 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
10b30 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
10b40 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
10b50 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
10b60 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
10b70 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
10b80 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
10b90 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
10ba0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
10bb0 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
10bc0 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
10bd0 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
10be0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
10bf0 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
10c00 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
10c10 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
10c20 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
10c30 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
10c40 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
10c50 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
10c60 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
10c70 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
10c80 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
10c90 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
10ca0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
10cb0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
10cc0 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
10cd0 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
10ce0 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
10cf0 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
10d00 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
10d10 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
10d20 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
10d30 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
10d40 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
10d50 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
10d60 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
10d70 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
10d80 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
10d90 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
10da0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
10db0 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
10dc0 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
10dd0 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
10de0 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
10df0 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
10e00 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10e10 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10e20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
10e30 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
10e40 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
10e50 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
10e60 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
10e70 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
10e80 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
10e90 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
10ea0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
10eb0 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
10ec0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
10ed0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
10ee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
10ef0 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
10f00 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
10f10 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
10f20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
10f30 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
10f40 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
10f50 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
10f60 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
10f70 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
10f80 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
10f90 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
10fa0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
10fb0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10fc0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
10fd0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
10fe0 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
10ff0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
11000 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
11010 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
11020 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
11030 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
11040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
11050 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
11060 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
11070 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
11080 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
11090 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
110a0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
110b0 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
110c0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
110d0 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b  fo;       /* A K
110e0 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75  eyInfo object su
110f0 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20  itable for this 
11100 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74  index */.  int t
11110 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
11120 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
11130 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
11140 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
11150 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
11160 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
11170 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
11180 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
11190 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
111a0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
111b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
111c0 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
111d0 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
111e0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
111f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11200 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
11210 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
11220 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
11230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
11240 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
11250 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
11260 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
11270 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78  signed autoIndex
11280 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  :2;    /* 1==UNI
11290 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
112a0 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
112b0 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
112c0 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
112d0 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
112e0 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
112f0 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
11300 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
11310 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
11320 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
11330 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
11340 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
11350 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
11360 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
11370 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
11380 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
11390 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
113a0 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
113b0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
113c0 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
113d0 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69  ring index */.#i
113e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
113f0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
11400 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11420 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
11430 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
11440 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
11450 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
11460 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
11470 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
11480 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
11490 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
114a0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
114b0 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
114c0 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
114d0 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
114e0 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
114f0 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
11500 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
11510 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
11520 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
11530 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
11540 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
11550 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
11560 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
11570 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
11580 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
11590 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
115a0 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
115b0 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
115c0 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
115d0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
115e0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
115f0 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
11600 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
11610 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11620 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
11630 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
11640 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
11650 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
11660 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
11670 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
11680 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
11690 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
116a0 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
116b0 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
116c0 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
116d0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
116e0 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
116f0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
11700 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
11710 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
11720 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
11730 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
11740 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
11750 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
11760 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
11770 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
11780 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
11790 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
117a0 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
117b0 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
117c0 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
117d0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
117e0 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
117f0 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
11800 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
11810 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
11820 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
11830 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
11840 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
11850 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
11860 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
11870 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
11880 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
11890 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
118a0 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
118b0 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
118c0 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
118d0 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
118e0 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
118f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
11900 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
11910 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
11920 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
11930 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
11940 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
11950 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
11960 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
11970 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
11980 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
11990 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
119a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
119b0 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
119c0 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
119d0 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
119e0 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
119f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
11a00 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
11a10 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
11a20 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
11a30 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
11a40 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
11a50 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
11a60 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
11a70 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
11a80 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
11a90 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
11aa0 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
11ab0 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
11ac0 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
11ad0 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
11ae0 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
11af0 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
11b00 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
11b10 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
11b20 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
11b30 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
11b40 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
11b50 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
11b60 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
11b70 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
11b80 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
11b90 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
11ba0 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
11bb0 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
11bc0 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11be0 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
11bf0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
11c00 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
11c10 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
11c20 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
11c30 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
11c40 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
11c50 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
11c60 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
11c90 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
11ca0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
11cb0 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
11cc0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
11cd0 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
11ce0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
11cf0 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
11d00 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
11d10 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
11d20 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
11d30 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
11d40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11d50 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
11d60 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
11d70 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
11d80 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
11d90 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
11da0 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
11db0 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
11dc0 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
11dd0 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
11de0 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
11df0 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
11e00 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
11e10 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
11e20 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
11e30 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
11e40 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
11e50 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
11e60 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
11e70 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
11e80 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
11e90 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
11ea0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
11eb0 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
11ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
11ed0 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
11ee0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
11ef0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
11f00 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
11f10 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
11f20 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
11f30 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
11f40 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
11f50 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
11f60 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
11f70 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
11f80 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
11f90 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
11fa0 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
11fb0 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
11fc0 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
11fd0 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
11fe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11ff0 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
12000 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
12010 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
12020 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
12030 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
12040 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
12050 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
12080 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
12090 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
120a0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
120d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
120e0 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
120f0 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
12100 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
12110 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
12120 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
12130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
12140 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
12150 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
12160 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
12170 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
12180 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
12190 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
121a0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
121b0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
121c0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
121d0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
121e0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
121f0 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
12200 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
12210 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
12220 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
12230 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
12240 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
12250 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
12260 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12270 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
12280 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
12290 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
122a0 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
122b0 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
122c0 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
122d0 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
122e0 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
122f0 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
12300 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
12310 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
12320 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
12330 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
12340 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
12350 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
12360 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
12370 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
12380 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
12390 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
123a0 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
123b0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
123c0 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
123d0 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
123e0 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
123f0 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
12400 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
12410 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
12420 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
12430 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
12440 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
12450 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
12460 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
12470 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
12480 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
12490 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
124a0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
124b0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
124c0 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
124d0 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
124e0 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
124f0 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
12500 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
12510 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
12520 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
12530 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
12540 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
12550 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12560 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
12570 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
12580 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
12590 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
125a0 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
125b0 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
125c0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
125d0 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
125e0 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
125f0 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
12600 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
12610 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
12620 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
12630 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
12640 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
12650 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
12660 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
12670 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
12680 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
12690 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
126a0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
126b0 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
126c0 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
126d0 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
126e0 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
126f0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
12700 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
12710 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
12720 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
12730 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
12740 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
12750 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
12760 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
12770 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
12780 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
12790 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
127a0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
127b0 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
127c0 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
127d0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
127e0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
127f0 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
12800 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
12810 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
12820 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
12830 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
12840 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
12850 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
12860 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
12870 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
12880 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
12890 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
128a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
128b0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
128c0 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
128d0 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
128e0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
128f0 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
12900 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
12910 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
12920 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
12930 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
12940 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
12950 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
12960 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
12970 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
12980 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
12990 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
129a0 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
129b0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
129c0 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
129d0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
129e0 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
129f0 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
12a00 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
12a10 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
12a20 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
12a30 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
12a40 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
12a50 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
12a60 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
12a70 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
12a80 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
12a90 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
12aa0 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
12ab0 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
12ac0 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
12ad0 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
12ae0 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
12af0 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
12b00 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
12b10 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
12b20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
12b30 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
12b40 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
12b50 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
12b60 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
12b70 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
12b80 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
12b90 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
12ba0 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
12bb0 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
12bc0 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
12bd0 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
12be0 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
12bf0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
12c00 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
12c10 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
12c20 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
12c30 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
12c40 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
12c50 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
12c60 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
12c70 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
12c80 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
12c90 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
12ca0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
12cb0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
12cc0 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
12cd0 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
12ce0 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
12cf0 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
12d00 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
12d10 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
12d20 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
12d30 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
12d40 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
12d50 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
12d60 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
12d70 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
12d80 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
12d90 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
12da0 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
12db0 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
12dc0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
12dd0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
12de0 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
12df0 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
12e00 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
12e10 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
12e20 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
12e30 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
12e40 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
12e50 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
12e60 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
12e70 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
12e80 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
12e90 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
12ea0 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
12eb0 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
12ec0 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
12ed0 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
12ee0 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
12ef0 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
12f00 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
12f10 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
12f20 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
12f30 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
12f40 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
12f50 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
12f60 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
12f70 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
12f80 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
12f90 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
12fa0 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
12fb0 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
12fc0 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
12fd0 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
12fe0 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
12ff0 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
13000 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
13010 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
13020 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
13030 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
13040 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
13050 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
13060 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
13070 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
13080 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
13090 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
130a0 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
130b0 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
130c0 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
130d0 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
130e0 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
130f0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
13100 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
13110 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
13120 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
13130 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
13140 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
13150 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
13160 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
13170 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
13180 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
13190 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
131a0 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
131b0 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
131c0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
131d0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
131e0 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
131f0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
13200 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
13210 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
13220 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
13230 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
13240 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
13250 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
13260 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
13270 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
13280 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
13290 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
132a0 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
132b0 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
132c0 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
132d0 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
132e0 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
132f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13300 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
13310 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
13320 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
13330 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
13340 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
13350 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
13360 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
13370 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
13380 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
13390 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
133a0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
133b0 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
133c0 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
133d0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
133e0 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
133f0 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a  lfunction. .  **
13400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13440 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
13450 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
13460 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
13470 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
13480 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
13490 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
134a0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
134b0 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
134c0 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
134d0 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
134e0 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
134f0 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
13500 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
13510 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
13520 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
13530 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
13540 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
13550 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
13560 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
13570 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
13580 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
13590 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
135a0 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
135b0 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
135c0 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
135d0 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
135e0 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
135f0 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
13600 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
13610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13650 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
13660 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
13670 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
13680 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13690 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
136a0 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
136b0 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
136c0 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
136d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
136e0 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
136f0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
13700 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
13730 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
13740 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
13770 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
13780 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
13790 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
137a0 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30  _Unlikely:  1000
137b0 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
137c0 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
137d0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
137e0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
137f0 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
13800 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
13830 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
13840 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
13850 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13870 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
13880 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
13890 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
138a0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
138b0 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
138c0 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
138d0 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
138e0 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
138f0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
13900 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
13910 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
13920 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
13950 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
13960 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
13970 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
13980 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13990 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
139a0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
139b0 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
139c0 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
139d0 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
139e0 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
139f0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
13a00 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
13a10 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
13a20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
13a30 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
13a40 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
13a50 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
13a60 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
13a70 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
13a80 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
13a90 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
13aa0 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
13ab0 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
13ac0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
13ad0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
13ae0 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
13af0 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
13b00 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
13b10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
13b20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
13b30 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
13b40 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
13b50 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
13b60 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
13b70 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
13b80 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
13b90 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
13ba0 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
13bb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
13bc0 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
13bd0 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
13be0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
13bf0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
13c00 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
13c10 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
13c20 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
13c30 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
13c40 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
13c50 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
13c60 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
13c70 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
13c80 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
13c90 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
13ca0 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
13cb0 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
13cc0 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
13cd0 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
13ce0 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
13cf0 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
13d00 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
13d10 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
13d20 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
13d30 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
13d40 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
13d50 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
13d60 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
13d70 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
13d80 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
13d90 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
13da0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
13db0 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
13dc0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
13dd0 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
13de0 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
13df0 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
13e00 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
13e10 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
13e20 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
13e30 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
13e40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
13e50 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
13e60 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
13e70 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
13e80 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
13e90 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
13ea0 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
13eb0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
13ec0 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
13ed0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
13ee0 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
13ef0 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
13f00 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
13f10 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
13f20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
13f30 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
13f40 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
13f50 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
13f60 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
13f70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
13f80 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
13f90 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
13fa0 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
13fb0 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
13fc0 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
13fd0 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
13fe0 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
13ff0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
14000 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
14010 61 6e 74 20 20 30 78 30 38 30 30 30 30 20 2f 2a  ant  0x080000 /*
14020 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e 73 74   Node is a const
14030 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ant */../*.** Th
14040 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
14050 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
14060 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
14070 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78  ts in the .** Ex
14080 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
14090 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
140a0 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
140b0 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
140c0 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
140d0 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
140e0 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
140f0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
14100 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
14110 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
14120 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
14130 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
14140 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
14150 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
14160 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
14170 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
14180 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
14190 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
141a0 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
141b0 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
141c0 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
141d0 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
141e0 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
141f0 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
14200 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
14210 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
14220 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
14230 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
14240 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
14250 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
14260 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
14270 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
14280 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
14290 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
142a0 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
142b0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
142c0 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
142d0 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20  y a normal Expr 
142e0 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
142f0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
14300 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
14310 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
14320 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e  flags .** and an
14330 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
14340 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
14350 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
14360 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
14370 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
14380 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
14390 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
143a0 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
143b0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
143c0 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
143d0 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
143e0 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
143f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
14400 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
14410 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
14420 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
14430 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
14440 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
14450 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
14460 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
14470 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
14480 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a  ader comment .**
14490 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
144a0 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
144b0 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
144c0 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
144d0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
144e0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
144f0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
14500 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
14510 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
14520 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
14530 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
14540 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
14550 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
14560 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
14570 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
14580 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
14590 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
145a0 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
145b0 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
145c0 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
145d0 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
145e0 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
145f0 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
14600 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
14610 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
14620 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
14630 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
14640 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
14650 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
14660 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
14670 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
14680 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
14690 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
146a0 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
146b0 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
146c0 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
146d0 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
146e0 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
146f0 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
14700 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
14710 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
14720 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
14730 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
14740 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
14750 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
14760 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
14770 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
14780 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
14790 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
147a0 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
147b0 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
147c0 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
147d0 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
147e0 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
147f0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
14800 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
14810 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
14820 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
14830 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
14840 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
14850 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
14860 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
14870 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
14880 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
14890 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
148a0 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
148b0 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72  he list */.  str
148c0 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
148d0 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
148e0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
148f0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
14900 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
14910 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
14920 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
14930 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
14940 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
14950 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
14960 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
14970 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
14980 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
14990 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
149a0 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
149b0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
149c0 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
149d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
149e0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
149f0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
14a00 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
14a10 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
14a20 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
14a30 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
14a40 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
14a50 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
14a60 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
14a70 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
14a80 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
14a90 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
14aa0 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
14ab0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
14ac0 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69  sable */.    uni
14ad0 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
14ae0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
14af0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
14b00 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
14b10 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
14b20 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
14b30 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
14b40 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
14b50 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
14b60 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
14b70 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
14b80 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
14b90 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
14ba0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
14bb0 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
14bc0 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
14bd0 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b      } u;.  } *a;
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
14c00 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
14c10 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
14c20 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
14c30 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
14c40 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
14c50 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
14c60 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
14c70 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
14c80 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
14c90 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
14ca0 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
14cb0 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
14cc0 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
14cd0 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
14ce0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
14cf0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
14d00 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
14d10 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
14d20 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
14d30 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
14d40 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
14d50 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
14d60 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
14d70 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
14d80 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
14d90 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
14da0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14db0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
14dc0 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
14dd0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
14de0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
14df0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
14e00 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
14e10 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
14e20 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
14e30 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
14e40 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
14e50 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
14e60 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
14e70 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
14e80 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
14e90 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
14ea0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
14eb0 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
14ec0 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
14ed0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
14ee0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
14ef0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
14f00 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
14f10 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
14f20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
14f30 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
14f40 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
14f50 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
14f60 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
14f70 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
14f80 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
14f90 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
14fa0 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
14fb0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
14fc0 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
14fd0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
14fe0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
14ff0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
15000 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
15010 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
15020 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
15030 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
15040 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
15050 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
15060 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
15070 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15080 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
15090 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
150a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
150b0 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
150c0 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
150d0 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
150e0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
150f0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
15100 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
15110 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
15120 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
15130 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
15140 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
15150 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
15160 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
15170 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
15180 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
15190 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
151a0 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
151b0 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
151c0 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
151d0 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
151e0 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
151f0 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
15200 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
15210 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
15220 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
15230 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
15240 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
15250 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
15260 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
15270 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53  (n)).#define MAS
15280 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73  KBIT32(n) (((uns
15290 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e  igned int)1)<<(n
152a0 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
152b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
152c0 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
152d0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
152e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
152f0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
15300 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
15310 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
15320 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
15330 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
15340 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
15350 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
15360 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
15370 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
15380 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
15390 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
153a0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
153b0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
153c0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
153d0 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
153e0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
153f0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
15400 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
15410 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
15420 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
15430 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
15440 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
15450 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
15460 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
15470 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
15480 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
15490 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
154a0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
154b0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
154c0 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
154d0 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
154e0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
154f0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
15500 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
15510 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
15520 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
15530 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
15540 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
15550 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
15560 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
15570 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
15580 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
15590 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
155a0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
155b0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
155c0 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
155d0 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
155e0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
155f0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
15600 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
15610 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
15620 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
15630 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
15640 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
15650 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
15660 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
15670 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
15680 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
15690 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
156a0 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
156b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
156c0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
156d0 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
156e0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
156f0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
15700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
15710 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
15720 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
15730 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
15740 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
15750 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
15760 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
15770 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
15780 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
15790 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
157a0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
157b0 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
157c0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
157d0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
157e0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
157f0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
15800 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
15810 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
15820 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
15830 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
15840 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
15850 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
15860 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
15870 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
15880 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
15890 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
158a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
158b0 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
158c0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
158d0 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
158e0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
158f0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
15900 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
15910 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
15920 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
15930 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
15940 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
15950 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
15960 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
15970 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
15980 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
15990 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
159a0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75  routine */.    u
159b0 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
159c0 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
159d0 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62   between this ab
159e0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
159f0 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ous */.    unsig
15a00 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
15a10 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
15a20 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
15a30 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
15a40 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
15a50 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
15a60 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
15a70 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
15a80 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ted */.    unsig
15a90 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
15aa0 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
15ab0 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
15ac0 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  tine */.    unsi
15ad0 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
15ae0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
15af0 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
15b00 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
15b10 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
15b20 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
15b30 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
15b40 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
15b50 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
15b60 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
15b70 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
15b80 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
15b90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
15ba0 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
15bb0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
15bc0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
15bd0 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
15be0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
15bf0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
15c00 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
15c10 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
15c20 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
15c30 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
15c40 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
15c50 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
15c60 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
15c70 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
15c80 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
15c90 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
15ca0 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
15cb0 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
15cc0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
15cd0 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
15ce0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
15cf0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
15d00 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
15d10 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
15d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
15d30 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
15d40 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
15d50 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
15d60 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
15d70 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
15d80 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
15d90 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
15da0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
15db0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
15dc0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
15dd0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
15de0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
15df0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
15e00 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
15e10 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
15e20 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
15e30 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
15e40 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
15e50 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
15e60 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
15e70 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
15e80 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
15e90 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
15ea0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
15eb0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
15ec0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
15ed0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
15ee0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
15ef0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
15f00 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
15f10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
15f20 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
15f30 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
15f40 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
15f50 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
15f60 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
15f70 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
15f80 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
15f90 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
15fa0 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
15fb0 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
15fc0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
15fd0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15fe0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
15ff0 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
16000 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
16010 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
16020 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
16030 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
16040 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
16050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16060 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
16070 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
16080 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
16090 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
160a0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
160b0 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
160c0 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
160d0 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
160e0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
160f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
16100 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
16110 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
16120 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
16130 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
16140 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
16150 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
16160 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
16170 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
16180 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
16190 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
161a0 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
161b0 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
161c0 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
161d0 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
161e0 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
161f0 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
16200 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
16210 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
16220 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
16230 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20  ERE_AND_ONLY    
16240 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
16250 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73  on't use indices
16260 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f   for OR terms */
16270 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
16280 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
16290 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0100 /* pOrder
162a0 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
162b0 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
162c0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
162d0 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30  TBY       0x0200
162e0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
162f0 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
16300 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
16310 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
16320 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30  ISTINCT    0x040
16330 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
16340 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
16350 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
16360 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
16370 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a  P      0x0800 /*
16380 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
16390 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
163a0 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
163b0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
163c0 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
163d0 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
163e0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
163f0 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
16400 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
16410 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
16420 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16430 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
16440 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
16450 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
16460 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
16470 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
16480 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
16490 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
164a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
164b0 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
164c0 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
164d0 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
164e0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
164f0 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
16500 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
16510 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
16520 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
16530 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
16540 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
16550 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
16560 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
16570 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
16580 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
16590 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
165a0 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
165b0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
165c0 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
165d0 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
165e0 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
165f0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
16600 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
16610 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
16620 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
16630 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
16640 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
16650 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
16660 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
16670 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
16680 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
16690 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
166a0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
166b0 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
166c0 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
166d0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
166e0 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
166f0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
16700 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
16710 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
16720 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
16730 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
16740 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
16750 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
16760 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
16770 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
16780 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
16790 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
167a0 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
167b0 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
167c0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
167d0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
167e0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
167f0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
16800 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
16810 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
16820 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
16830 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
16840 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
16850 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
16860 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
16870 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
16880 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
16890 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
168a0 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
168b0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
168c0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
168d0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
168e0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
168f0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
16900 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
16910 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
16920 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
16930 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
16940 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
16950 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
16960 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
16970 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
16980 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
16990 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
169a0 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
169b0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
169c0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
169d0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
169e0 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
169f0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
16a00 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
16a10 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
16a20 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
16a30 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
16a40 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
16a50 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
16a60 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
16a70 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
16a80 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
16a90 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
16aa0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16ab0 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
16ac0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
16ad0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16af0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
16b00 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
16b10 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
16b20 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67  s */.  u8 ncFlag
16b30 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  s;          /* Z
16b40 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
16b50 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
16b60 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
16b70 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
16b80 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
16b90 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
16ba0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
16bb0 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
16bc0 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74  1    /* Aggregat
16bd0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
16be0 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
16bf0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
16c00 67 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20  g    0x02    /* 
16c10 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
16c20 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
16c30 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
16c40 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
16c50 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  4    /* True if 
16c60 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
16c70 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
16c80 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
16c90 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
16ca0 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  08    /* True if
16cb0 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
16cc0 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
16cd0 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
16ce0 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 31 30  C_PartIdx   0x10
16cf0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
16d00 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
16d10 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
16d20 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
16d30 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
16d40 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
16d50 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
16d60 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
16d70 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
16d80 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
16d90 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
16da0 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
16db0 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
16dc0 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
16dd0 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
16de0 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
16df0 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
16e00 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
16e10 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
16e20 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
16e30 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
16e40 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
16e50 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
16e60 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
16e70 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
16e80 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
16e90 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
16ea0 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
16eb0 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
16ec0 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
16ed0 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
16ee0 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
16ef0 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
16f00 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
16f10 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
16f20 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
16f30 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
16f40 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
16f50 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
16f60 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
16f70 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
16f80 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
16f90 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
16fa0 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
16fb0 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
16fc0 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
16fd0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
16fe0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
16ff0 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
17000 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
17010 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
17020 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
17030 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
17040 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
17050 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
17060 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
17070 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
17080 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
17090 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
170a0 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
170b0 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
170c0 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
170d0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
170e0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
170f0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
17100 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
17110 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
17120 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
17130 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
17140 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
17150 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
17160 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
17170 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
17180 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
17190 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
171a0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
171b0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
171c0 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
171d0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
171e0 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36  _EXCEPT */.  u16
171f0 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
17200 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
17210 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
17220 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
17230 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
17240 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
17250 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
17260 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
17270 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
17280 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
17290 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
172a0 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
172b0 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e  elect */.  u64 n
172c0 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20  SelectRow;      
172d0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
172e0 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
172f0 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
17300 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
17310 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
17320 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
17330 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
17340 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
17350 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
17360 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
17370 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
17380 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
17390 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
173a0 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
173b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
173c0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
173d0 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
173e0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
173f0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
17400 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
17410 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
17420 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
17430 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
17440 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
17450 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
17460 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
17470 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
17480 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
17490 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
174a0 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
174b0 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
174c0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
174d0 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
174e0 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
174f0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
17500 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
17510 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
17520 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
17530 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
17540 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
17550 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ULL. */.};../*.*
17560 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
17570 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
17580 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
17590 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
175a0 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
175b0 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
175c0 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
175d0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
175e0 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
175f0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
17600 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
17610 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
17620 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
17630 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
17640 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
17650 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
17660 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  004  /* Contains
17670 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17680 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
17690 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
176a0 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73     0x0008  /* Us
176b0 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
176c0 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
176d0 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
176e0 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30  ed        0x0010
176f0 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
17700 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
17710 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
17720 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
17730 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20  nfo     0x0020  
17740 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
17750 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
17760 74 61 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20  tadata */.      
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17780 20 20 20 20 20 30 78 30 30 34 30 20 20 4e 4f 54       0x0040  NOT
17790 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65   USED */.#define
177a0 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
177b0 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53      0x0080  /* S
177c0 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
177d0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
177e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177f0 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31       /*     0x01
17800 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a  00  NOT USED */.
17810 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
17820 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30  dFrom      0x020
17830 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
17840 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
17850 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  OM clause */.#de
17860 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
17870 76 65 72 74 20 20 20 20 30 78 30 34 30 30 20 20  vert    0x0400  
17880 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
17890 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
178a0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
178b0 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
178c0 65 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20  e       0x0800  
178d0 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
178e0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
178f0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
17900 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
17910 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
17920 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
17930 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 0a 0a  ound query */...
17940 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
17950 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
17960 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
17970 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
17980 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
17990 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
179a0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
179b0 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
179c0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
179d0 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
179e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
179f0 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
17a00 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
17a10 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
17a20 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20   index .**      
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17a40 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
17a50 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
17a60 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
17a70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
17a80 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
17a90 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
17aa0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
17ab0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
17ac0 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
17ad0 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
17ae0 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
17af0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
17b00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17b10 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
17b20 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
17b30 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
17b40 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
17b50 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
17b60 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
17b70 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
17b80 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
17b90 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
17ba0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
17bb0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
17be0 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
17bf0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
17c00 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
17c10 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
17c20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
17c30 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
17c40 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
17c50 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
17c60 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
17c70 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
17c80 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
17c90 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
17ca0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
17cb0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
17cc0 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
17cd0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
17ce0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
17cf0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
17d00 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
17d10 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
17d20 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
17d30 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
17d50 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
17d60 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
17d70 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
17da0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
17db0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
17dc0 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
17de0 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
17df0 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
17e00 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
17e10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
17e20 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
17e30 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
17e40 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
17e50 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
17e80 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
17e90 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
17ea0 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  . .**           
17eb0 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
17ec0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
17ed0 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
17ee0 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
17f10 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
17f20 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
17f30 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
17f40 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
17f50 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
17f60 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
17f70 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
17fa0 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
17fb0 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
17fc0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17fe0 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
17ff0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
18000 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
18030 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
18040 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
18050 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
18060 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
18070 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
18080 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
18090 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
180a0 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
180b0 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
180c0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
180d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
180e0 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
180f0 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
18100 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
18130 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
18140 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
18150 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
18180 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
18190 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
181a0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
181d0 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
181e0 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
181f0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
18200 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
18210 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
18220 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
18230 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
18240 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
18250 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
18260 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
18270 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18280 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
18290 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
182a0 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
182b0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
182c0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
182d0 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
182e0 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
182f0 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
18320 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
18330 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
18340 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
18350 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
18360 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18370 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
18380 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
18390 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
183a0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
183b0 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
183e0 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
183f0 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
18400 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
18430 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
18440 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
18450 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
18460 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
18470 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
18480 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
18490 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
184b0 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
184c0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
184d0 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
184e0 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
18500 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
18510 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
18520 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
18530 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
18540 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
18550 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
18580 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
18590 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
185a0 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
185c0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
185d0 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
185e0 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
185f0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
18600 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
18610 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
18620 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
18630 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
18640 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
18650 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
18660 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
18670 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
18680 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
18690 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
186a0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
186b0 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
186c0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
186d0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
186e0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
186f0 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
18700 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
18710 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
18720 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
18730 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
18740 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
18750 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
18760 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
18770 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
18780 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
18790 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
187a0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
187b0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
187c0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
187d0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
187e0 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
187f0 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
18800 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
18810 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
18820 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
18830 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
18840 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
18850 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
18860 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
18870 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
18880 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
18890 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
188a0 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
188b0 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
188c0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
188d0 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
188e0 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
188f0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
18900 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
18910 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
18920 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
18930 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
18940 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
18950 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
18960 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
18970 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
18980 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
18990 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
189a0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
189b0 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
189c0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
189d0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
189e0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
189f0 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
18a00 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
18a10 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
18a20 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
18a30 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
18a40 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
18a50 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
18a60 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
18a70 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
18a80 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18a90 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
18aa0 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
18ab0 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
18ac0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
18ad0 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
18ae0 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
18af0 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
18b00 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
18b10 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
18b20 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
18b30 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
18b40 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
18b50 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
18b60 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
18b70 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
18b80 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
18b90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
18ba0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
18bb0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
18bc0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
18bd0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
18be0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
18bf0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
18c00 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18c10 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
18c20 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
18c30 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
18c40 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
18c50 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
18c60 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
18c70 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
18c80 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
18c90 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
18ca0 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
18cb0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
18cc0 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
18cd0 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
18ce0 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
18cf0 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
18d00 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
18d10 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
18d20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
18d30 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
18d40 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
18d50 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
18d60 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
18d70 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
18d80 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
18d90 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
18da0 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
18db0 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
18dc0 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
18dd0 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
18de0 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
18df0 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
18e00 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
18e10 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
18e20 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
18e30 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
18e40 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
18e50 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
18e60 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
18e70 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
18e80 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
18e90 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
18ea0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
18eb0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
18ec0 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
18ed0 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
18ee0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
18ef0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
18f00 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
18f10 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
18f20 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
18f30 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
18f40 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
18f50 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
18f60 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
18f70 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
18f80 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
18f90 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
18fa0 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
18fb0 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
18fc0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
18fd0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
18fe0 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
18ff0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
19000 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
19010 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
19020 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
19030 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
19040 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
19050 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
19060 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
19070 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
19080 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
19090 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
190a0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
190b0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
190c0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
190d0 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
190e0 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
190f0 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
19100 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
19110 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
19120 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
19130 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
19140 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
19150 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
19160 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
19170 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
19180 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
19190 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
191a0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
191b0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
191c0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
191d0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
191e0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
191f0 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
19200 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
19210 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
19220 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
19230 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
19240 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
19250 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
19260 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
19270 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
19280 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
19290 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
192a0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
192b0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
192c0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
192d0 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
192e0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
192f0 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
19300 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
19310 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
19320 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
19330 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
19340 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
19350 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
19360 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
19370 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
19380 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
19390 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
193a0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
193b0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
193c0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
193d0 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
193e0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
193f0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
19400 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
19410 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
19420 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
19430 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
19440 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
19450 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
19460 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
19470 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
19480 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
19490 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
194a0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
194b0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
194c0 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
194d0 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
194e0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
194f0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
19500 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
19510 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
19520 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74 65    typedef sqlite
19530 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b  3_uint64 yDbMask
19540 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
19550 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
19560 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a  DbMask;.#endif..
19570 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
19580 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
19590 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
195a0 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
195b0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
195c0 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
195d0 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
195e0 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
195f0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
19600 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
19610 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
19620 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
19630 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
19640 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
19650 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
19660 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
19670 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
19680 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
19690 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
196a0 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
196b0 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
196c0 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
196d0 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
196e0 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
196f0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
19700 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
19710 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
19720 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
19730 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
19740 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
19750 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
19760 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
19770 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
19780 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
19790 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
197a0 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
197b0 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
197c0 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
197d0 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
197e0 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
197f0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
19800 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
19810 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
19820 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
19830 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
19840 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
19850 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
19860 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
19870 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
19880 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
19890 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
198a0 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
198b0 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
198c0 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
198d0 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
198e0 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
198f0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
19900 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
19910 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
19920 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
19930 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
19940 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
19950 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
19960 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
19970 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
19980 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
19990 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
199a0 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
199b0 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
199c0 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
199d0 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
199e0 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
199f0 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
19a00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19a10 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
19a20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
19a30 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
19a40 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
19a50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19a60 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
19a70 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
19a80 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
19a90 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
19aa0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
19ab0 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
19ac0 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
19ad0 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
19ae0 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
19af0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
19b00 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
19b10 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
19b20 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
19b30 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
19b40 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
19b50 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
19b60 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
19b70 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
19b80 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
19b90 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
19ba0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  nts */.  int aTe
19bb0 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
19bc0 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
19bd0 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
19be0 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
19bf0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
19c00 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
19c10 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
19c20 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
19c30 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
19c40 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
19c50 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
19c60 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
19c70 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
19c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19c90 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
19ca0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
19cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19cc0 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
19cd0 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
19ce0 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
19cf0 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
19d00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19d10 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
19d20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
19d30 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
19d40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19d50 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
19d60 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
19d70 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
19d80 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
19d90 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
19da0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
19db0 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
19dc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
19dd0 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
19de0 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
19df0 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20    int iFixedOp; 
19e00 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20         /* Never 
19e10 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73  back out opcodes
19e20 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65   iFixedOp-1 or e
19e30 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20  arlier */.  int 
19e40 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
19e50 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
19e60 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
19e70 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
19e80 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72  ts */.  int iPar
19e90 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20  tIdxTab;     /* 
19ea0 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  Table correspond
19eb0 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c  ing to a partial
19ec0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
19ed0 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
19ee0 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
19ef0 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
19f00 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
19f10 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
19f20 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
19f30 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
19f40 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
19f50 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
19f60 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  lues */.  int nL
19f70 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
19f80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  * Number of labe
19f90 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
19fa0 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
19fb0 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
19fc0 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
19fd0 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61  .  struct yColCa
19fe0 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54  che {.    int iT
19ff0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1a000 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20  /* Table cursor 
1a010 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31  number */.    i1
1a020 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 iColumn;      
1a030 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c      /* Table col
1a040 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  umn number */.  
1a050 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20    u8 tempReg;   
1a060 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20          /* iReg 
1a070 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74  is a temp regist
1a080 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  er that needs to
1a090 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20   be freed */.   
1a0a0 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
1a0b0 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e         /* Nestin
1a0c0 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69  g level */.    i
1a0d0 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20  nt iReg;        
1a0e0 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68       /* Reg with
1a0f0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1a100 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e  olumn. 0 means n
1a110 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  one. */.    int 
1a120 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20  lru;            
1a130 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e    /* Least recen
1a140 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68  tly used entry h
1a150 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  as the smallest 
1a160 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f  value */.  } aCo
1a170 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f  lCache[SQLITE_N_
1a180 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f  COLCACHE];  /* O
1a190 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
1a1a0 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a  mn cache entry *
1a1b0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1a1c0 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1a1d0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1a1e0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1a1f0 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1a200 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1a210 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1a220 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1a230 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1a240 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1a250 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1a260 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1a270 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1a280 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1a290 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1a2a0 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1a2b0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1a2c0 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
1a2d0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1a2e0 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
1a2f0 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
1a300 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  rify */.  int re
1a310 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1a320 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1a330 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1a340 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1a350 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1a360 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1a370 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1a380 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1a390 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1a3a0 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1a3b0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1a3c0 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1a3d0 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1a3e0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1a3f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a400 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
1a410 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
1a420 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a430 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
1a440 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
1a450 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
1a460 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
1a470 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
1a480 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1a490 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
1a4a0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
1a4b0 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
1a4c0 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
1a4d0 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
1a4e0 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  */..  /* Informa
1a4f0 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20  tion used while 
1a500 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70  coding trigger p
1a510 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61  rograms. */.  Pa
1a520 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1a530 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1a540 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1a550 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1a560 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1a570 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1a580 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1a590 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1a5a0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1a5b0 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1a5c0 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1a5d0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f  teTable opcode o
1a5e0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1a5f0 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70  /.  int addrSkip
1a600 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72  PK;      /* Addr
1a610 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69  ess of instructi
1a620 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41  on to skip PRIMA
1a630 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
1a640 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
1a650 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
1a660 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
1a670 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
1a680 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
1a690 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
1a6a0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1a6b0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
1a6c0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
1a6d0 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
1a6e0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
1a6f0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
1a700 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
1a710 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
1a720 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
1a730 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
1a740 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
1a750 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1a760 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1a770 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
1a780 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
1a790 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
1a7a0 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
1a7b0 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
1a7c0 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
1a7d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a7e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a7f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a810 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65  *****.  ** Above
1a820 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
1a830 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
1a840 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
1a850 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
1a860 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
1a870 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e  rsion.  The boun
1a880 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65  dary between the
1a890 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69  se two regions i
1a8a0 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a  s determined.  *
1a8b0 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66  * using offsetof
1a8c0 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20  (Parse,nVar) so 
1a8d0 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d  the nVar field m
1a8e0 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74  ust be the first
1a8f0 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74   field.  ** in t
1a900 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
1a910 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
1a920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
1a960 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  ..  int nVar;   
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a980 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
1a990 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
1a9a0 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
1a9b0 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20  */.  int nzVar; 
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a9d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69  * Number of avai
1a9e0 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61  lable slots in a
1a9f0 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  zVar[] */.  u8 i
1aa00 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
1aa10 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
1aa20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
1aa30 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
1aa40 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20    u8 bFreeWith; 
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1aa60 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f  rue if pWith sho
1aa70 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74  uld be freed wit
1aa80 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38  h parser */.  u8
1aa90 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1aaa0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1aab0 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1aac0 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1aad0 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1aae0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1aaf0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1ab00 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1ab10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ab20 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1ab30 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1ab40 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1ab50 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1ab60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1ab70 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1ab80 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1ab90 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1abb0 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
1abc0 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
1abd0 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
1abe0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
1abf0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
1ac00 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
1ac10 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
1ac20 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
1ac30 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1ac40 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
1ac50 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
1ac60 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
1ac70 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
1ac80 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
1ac90 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
1aca0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1acb0 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
1acc0 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
1acd0 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1ace0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ad00 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
1ad10 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1ad20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
1ad30 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
1ad40 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
1ad50 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
1ad60 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
1ad70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
1ad80 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
1ad90 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
1ada0 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
1adb0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
1adc0 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
1add0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
1ade0 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
1adf0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
1ae00 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
1ae10 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
1ae20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
1ae30 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
1ae40 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
1ae50 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
1ae60 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1ae70 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
1ae80 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
1ae90 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
1aea0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
1aeb0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1aec0 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1aed0 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1aee0 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
1aef0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
1af00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1af10 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1af20 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
1af30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1af40 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1af50 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1af60 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1af70 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1af80 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1af90 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1afa0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1afb0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1afc0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1afd0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1afe0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1aff0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1b000 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1b010 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1b020 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1b030 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1b040 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1b050 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1b060 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1b070 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1b080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1b090 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1b0a0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b  e, or NULL */.};
1b0b0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
1b0c0 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
1b0d0 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
1b0e0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1b0f0 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
1b100 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1b110 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
1b120 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1b130 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
1b140 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1b150 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
1b160 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
1b170 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1b180 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1b190 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1b1a0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
1b1b0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
1b1c0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
1b1d0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
1b1e0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
1b1f0 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
1b200 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
1b210 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
1b220 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
1b230 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1b240 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
1b250 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
1b260 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
1b270 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1b280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b290 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
1b2a0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
1b2b0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
1b2c0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
1b2d0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
1b2e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1b2f0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1b300 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
1b310 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1b320 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
1b330 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
1b340 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1b350 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
1b360 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
1b370 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
1b380 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
1b390 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
1b3a0 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
1b3b0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
1b3c0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
1b3d0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
1b3e0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
1b3f0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
1b400 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1b410 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
1b420 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
1b430 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
1b440 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
1b450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1b460 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20  AG_CLEARCACHE   
1b470 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61   0x20    /* Clea
1b480 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  r pseudo-table c
1b490 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d  ache in OP_Colum
1b4a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
1b4b0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
1b4c0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
1b4d0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
1b4e0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
1b4f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1b500 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
1b510 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
1b520 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
1b530 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
1b540 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
1b550 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
1b560 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
1b570 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
1b580 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
1b590 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
1b5a0 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  G       0x02    
1b5b0 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
1b5c0 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
1b5d0 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
1b5e0 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
1b5f0 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
1b600 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
1b610 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
1b620 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  on */../*. * Eac
1b630 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
1b640 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
1b650 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
1b660 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
1b670 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
1b680 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50  rigger. . *. * P
1b690 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
1b6a0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1b6b0 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
1b6c0 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
1b6d0 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
1b6e0 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
1b6f0 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
1b700 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
1b710 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
1b720 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
1b730 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
1b740 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
1b750 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
1b760 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
1b770 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
1b780 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
1b790 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
1b7a0 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
1b7b0 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
1b7c0 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
1b7d0 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
1b7e0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
1b7f0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
1b800 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
1b810 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
1b820 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
1b830 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
1b840 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
1b850 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
1b860 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
1b870 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
1b880 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1b890 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
1b8a0 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
1b8b0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
1b8c0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
1b8d0 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
1b8e0 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
1b8f0 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
1b900 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1b910 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1b920 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
1b930 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
1b940 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1b950 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
1b960 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
1b970 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
1b980 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
1b990 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
1b9a0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1b9b0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1b9c0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1b9d0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1b9e0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
1b9f0 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
1ba00 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1ba10 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
1ba20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
1ba30 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
1ba40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1ba50 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
1ba60 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1ba70 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
1ba80 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
1ba90 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
1baa0 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
1bab0 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
1bac0 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
1baf0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
1bb00 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
1bb10 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1bb20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
1bb30 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1bb40 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
1bb50 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
1bb60 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
1bb70 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1bb80 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
1bb90 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
1bba0 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
1bbb0 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
1bbc0 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
1bbd0 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
1bbe0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
1bbf0 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
1bc00 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1bc10 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
1bc20 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
1bc30 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
1bc40 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
1bc50 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
1bc60 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
1bc70 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
1bc80 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  which. .**.** If
1bc90 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
1bca0 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
1bcb0 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
1bcc0 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
1bcd0 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
1bce0 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
1bcf0 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
1bd00 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
1bd10 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
1bd20 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
1bd30 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1bd40 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
1bd50 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1bd60 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1bd70 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
1bd80 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
1bd90 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
1bda0 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
1bdb0 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
1bdc0 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  m. . *. * Instan
1bdd0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1bde0 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
1bdf0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
1be00 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
1be10 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
1be20 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
1be30 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
1be40 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
1be50 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20  member of the . 
1be60 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
1be70 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
1be80 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
1be90 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
1bea0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
1beb0 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
1bec0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
1bed0 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54  rogram.. * . * T
1bee0 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
1bef0 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
1bf00 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
1bf10 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
1bf20 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
1bf30 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
1bf40 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
1bf50 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
1bf60 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
1bf70 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c  d by the . * val
1bf80 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
1bf90 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
1bfa0 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
1bfb0 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
1bfc0 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
1bfd0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
1bfe0 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
1bff0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1c000 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
1c010 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
1c020 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1c030 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1c040 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
1c050 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
1c060 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
1c070 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65  e NULL.. * targe
1c080 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1c090 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1c0a0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1c0b0 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
1c0c0 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
1c0d0 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
1c0e0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1c0f0 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
1c100 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1c120 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
1c130 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
1c140 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1c150 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
1c160 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1c170 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
1c180 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
1c190 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20  VALUES ... . *  
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1c1b0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
1c1c0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
1c1d0 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
1c1e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
1c1f0 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
1c200 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
1c210 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  LETE). * target 
1c220 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1c230 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1c240 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1c250 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
1c260 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
1c270 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1c280 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
1c290 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1c2a0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1c2b0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1c2c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1c2d0 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
1c2e0 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72  K_UPDATE). * tar
1c2f0 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1c300 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1c310 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1c320 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1c330 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
1c340 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1c350 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1c360 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1c370 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1c380 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1c390 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1c3a0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
1c3b0 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
1c3c0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
1c3d0 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
1c3e0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
1c3f0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
1c400 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
1c410 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
1c420 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
1c430 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
1c440 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
1c450 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
1c460 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
1c470 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
1c480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c490 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1c4a0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1c4b0 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
1c4c0 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
1c4d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
1c4e0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
1c4f0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
1c500 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
1c510 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
1c520 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
1c530 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
1c540 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
1c550 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e  * SELECT statmen
1c560 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
1c570 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43  RT INTO .. SELEC
1c580 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e  T ... */.  Token
1c590 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20   target;        
1c5a0 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
1c5b0 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
1c5c0 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
1c5d0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1c5e0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1c5f0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
1c600 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1c610 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
1c620 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
1c630 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
1c640 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c  UPDATE. */.  IdL
1c650 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
1c660 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
1c670 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
1c680 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1c690 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
1c6a0 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
1c6b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1c6c0 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
1c6d0 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
1c6e0 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
1c6f0 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
1c700 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1c710 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1c720 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
1c730 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
1c740 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
1c750 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
1c760 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
1c770 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
1c780 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
1c790 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
1c7a0 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66  it.  .*/.typedef
1c7b0 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
1c7c0 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
1c7d0 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
1c7e0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1c7f0 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
1c800 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
1c810 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
1c820 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1c830 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a   *pSchema;    /*
1c840 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68   Fix items to th
1c850 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
1c860 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20  nt bVarOnly;    
1c870 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
1c880 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
1c890 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f  ces only */.  co
1c8a0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
1c8b0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
1c8c0 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63  ll objects are c
1c8d0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73  ontained in this
1c8e0 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
1c8f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
1c900 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68  ;  /* Type of th
1c910 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
1c920 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
1c930 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  sages */.  const
1c940 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f   Token *pName; /
1c950 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1c960 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1c970 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1c980 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
1c990 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20  n objected used 
1c9a0 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68  to accumulate th
1c9b0 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69  e text of a stri
1c9c0 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64  ng where we.** d
1c9d0 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c  o not necessaril
1c9e0 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74  y know how big t
1c9f0 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62  he string will b
1ca00 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  e in the end..*/
1ca10 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d  .struct StrAccum
1ca20 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1ca30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
1ca40 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
1ca50 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
1ca60 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
1ca70 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20  char *zBase;    
1ca80 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61       /* A base a
1ca90 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20  llocation.  Not 
1caa0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a  from malloc. */.
1cab0 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20    char *zText;  
1cac0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74         /* The st
1cad0 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73  ring collected s
1cae0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1caf0 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20  nChar;          
1cb00 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65  /* Length of the
1cb10 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a   string so far *
1cb20 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b  /.  int  nAlloc;
1cb30 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
1cb40 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
1cb50 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
1cb60 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63  /.  int  mxAlloc
1cb70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
1cb80 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69  mum allowed stri
1cb90 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75  ng length */.  u
1cba0 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20  8   useMalloc;  
1cbb0 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20      /* 0: none, 
1cbc0 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c   1: sqlite3DbMal
1cbd0 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33  loc,  2: sqlite3
1cbe0 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20  _malloc */.  u8 
1cbf0 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
1cc00 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
1cc10 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
1cc20 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65  TOOBIG */.};.#de
1cc30 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f  fine STRACCUM_NO
1cc40 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20  MEM   1.#define 
1cc50 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
1cc60 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e   2../*.** A poin
1cc70 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
1cc80 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
1cc90 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
1cca0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
1ccb0 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
1ccc0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
1ccd0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
1cce0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
1ccf0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1cd00 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1cd10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
1cd20 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
1cd30 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
1cd40 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
1cd50 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
1cd60 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
1cd70 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1cd80 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
1cd90 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
1cda0 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
1cdb0 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
1cdc0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1cdd0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1cde0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
1cdf0 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
1ce00 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
1ce10 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
1ce20 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
1ce30 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
1ce40 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
1ce50 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
1ce60 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
1ce70 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
1ce80 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1ce90 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
1cea0 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
1ceb0 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
1cec0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ced0 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
1cee0 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
1cef0 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1cf20 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
1cf30 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
1cf40 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1cf50 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1cf60 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
1cf70 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1cf80 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cfa0 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
1cfb0 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
1cfc0 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
1cfd0 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
1cff0 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
1d000 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
1d010 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ns */.  int mxSt
1d020 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
1d030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1d040 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
1d050 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
1d060 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
1d070 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
1d080 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
1d090 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
1d0a0 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
1d0b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d0c0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1d0d0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
1d0e0 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
1d0f0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1d100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1d110 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1d120 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
1d130 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
1d140 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
1d150 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1d160 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1d170 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
1d180 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1d190 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
1d1a0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1d1b0 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
1d1c0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
1d1d0 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
1d1e0 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
1d1f0 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
1d200 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
1d210 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
1d240 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
1d250 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d270 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
1d280 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
1d290 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
1d2a0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
1d2b0 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
1d2c0 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
1d2d0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
1d2e0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1d2f0 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
1d300 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
1d310 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1d320 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
1d330 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1d340 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
1d350 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
1d360 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1d370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
1d380 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
1d390 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1d3c0 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
1d3d0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
1d3e0 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1d3f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d400 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
1d410 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
1d420 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d440 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
1d450 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
1d460 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1d470 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1d480 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
1d490 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1d4a0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
1d4d0 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
1d4e0 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
1d4f0 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
1d500 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
1d510 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
1d520 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
1d530 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
1d540 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
1d550 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
1d560 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
1d570 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68  abled */.  /* Th
1d580 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
1d590 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
1d5a0 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
1d5b0 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
1d5c0 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
1d5d0 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
1d5e0 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
1d5f0 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
1d620 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
1d630 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
1d640 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
1d670 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
1d680 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
1d690 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1d6c0 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
1d6d0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1d6e0 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d700 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1d710 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1d720 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
1d730 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
1d740 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1d750 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1d760 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1d770 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
1d780 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1d790 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d7a0 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
1d7b0 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
1d7c0 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
1d7d0 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
1d7e0 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
1d7f0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1d800 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
1d810 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
1d820 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
1d830 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
1d840 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
1d850 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d870 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
1d880 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
1d890 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1d8a0 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
1d8b0 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
1d8c0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1d8d0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
1d8e0 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
1d8f0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1d900 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
1d910 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
1d920 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
1d930 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
1d940 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
1d950 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
1d960 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
1d970 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
1d980 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
1d990 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
1d9a0 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
1d9b0 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
1d9c0 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e  oid*,int iSrcLin
1d9d0 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
1d9e0 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
1d9f0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
1da00 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da30 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
1da40 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1da50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
1da60 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74  ILTIN_TEST.  int
1da70 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
1da80 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
1da90 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
1daa0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
1dab0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
1dac0 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dae0 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
1daf0 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
1db00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
1db10 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
1db20 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
1db30 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
1db40 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
1db50 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
1db60 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
1db70 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1db80 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
1db90 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1dba0 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
1dbb0 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
1dbc0 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
1dbd0 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
1dbe0 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
1dbf0 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
1dc00 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
1dc10 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
1dc20 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
1dc30 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
1dc40 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
1dc50 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
1dc60 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
1dc70 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
1dc80 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
1dc90 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
1dca0 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
1dcb0 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
1dcc0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1dcd0 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
1dce0 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
1dcf0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
1dd00 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
1dd10 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
1dd20 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
1dd30 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1dd40 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
1dd50 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
1dd60 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
1dd70 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
1dd80 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
1dd90 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
1dda0 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
1ddb0 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
1ddc0 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  {.  int (*xExprC
1ddd0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1dde0 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
1ddf0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
1de00 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
1de10 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
1de20 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
1de30 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
1de40 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1de50 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
1de60 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
1de70 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
1de80 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
1de90 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1dea0 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1deb0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ded0 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1dee0 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65    */.  int walke
1def0 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
1df20 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e  bqueries */.  un
1df30 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
1df60 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
1df70 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
1df80 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfa0 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
1dfb0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
1dfc0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfe0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
1dff0 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  ger value */.   
1e000 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1e010 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1e020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1e030 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1e040 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
1e050 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e070 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
1e080 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1e090 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1e0a0 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1e0b0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1e0c0 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1e0d0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1e0e0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1e0f0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1e100 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1e110 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1e120 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1e130 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1e140 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1e150 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1e160 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1e170 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1e180 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1e190 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1e1a0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1e1b0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1e1c0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1e1d0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1e1e0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1e1f0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1e200 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1e210 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1e220 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1e230 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1e240 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1e250 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1e260 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1e270 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1e280 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1e290 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1e2a0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1e2b0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1e2c0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
1e2d0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
1e2e0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
1e2f0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
1e300 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
1e310 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
1e320 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
1e330 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
1e340 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e360 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
1e370 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1e380 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
1e390 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
1e3a0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
1e3b0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
1e3c0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1e3d0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
1e400 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1e410 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
1e420 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e440 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
1e450 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
1e460 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
1e470 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
1e480 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
1e490 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
1e4a0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
1e4b0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
1e4c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e4d0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
1e4e0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
1e4f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b  onst char *zErr;
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e510 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
1e520 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
1e530 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
1e540 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  [1];.};../*.** A
1e550 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1e560 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1e570 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1e580 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1e590 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1e5a0 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1e5b0 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1e5c0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1e5d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1e5e0 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1e5f0 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1e600 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1e610 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1e620 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1e650 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1e660 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1e670 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1e680 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
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 20                  
1e6b0 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1e6c0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1e6d0 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1e6e0 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1e6f0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1e700 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1e710 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1e720 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1e730 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1e740 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1e750 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1e760 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1e770 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1e780 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1e790 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1e7a0 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1e7b0 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1e7c0 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1e7d0 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1e7e0 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1e7f0 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1e800 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1e810 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e820 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1e830 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1e840 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1e850 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1e860 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1e870 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1e880 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1e890 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1e8a0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1e8b0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1e8c0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1e8d0 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1e8e0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1e8f0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1e900 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1e910 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1e920 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1e930 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1e940 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1e950 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1e960 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1e970 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1e980 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1e990 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1e9a0 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1e9b0 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1e9c0 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1e9d0 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1e9e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1e9f0 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1ea00 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1ea10 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1ea20 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1ea30 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1ea40 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1ea50 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1ea60 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1ea70 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1ea80 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1ea90 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1eaa0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1eab0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1eac0 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1ead0 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1eae0 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1eaf0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1eb00 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1eb10 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1eb20 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1eb30 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1eb40 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1eb50 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1eb60 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1eb70 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1eb80 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1eb90 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1eba0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1ebb0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1ebc0 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1ebd0 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1ebe0 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1ebf0 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1ec00 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1ec10 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1ec20 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1ec30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ec40 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1ec50 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1ec60 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1ec70 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1ec80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1ec90 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1eca0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1ecb0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1ecc0 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1ecd0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1ece0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1ecf0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1ed00 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1ed10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1ed20 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1ed30 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1ed40 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1ed50 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1ed60 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1ed70 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1ed80 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1ed90 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1eda0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1edb0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1edc0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1edd0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1ede0 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1edf0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1ee00 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1ee10 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1ee20 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1ee30 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1ee40 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1ee50 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1ee60 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1ee70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1ee80 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1ee90 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1eea0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1eeb0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1eec0 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1eed0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1eee0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1eef0 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1ef00 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1ef10 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1ef20 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1ef30 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1ef40 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1ef50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ef60 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1ef70 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1ef80 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1ef90 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1efa0 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1efb0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1efc0 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1efd0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1efe0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1eff0 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1f000 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1f010 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1f020 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1f030 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1f040 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1f050 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1f060 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1f070 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1f080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1f090 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1f0a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1f0b0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1f0c0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1f0d0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1f0e0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1f0f0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1f100 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1f110 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1f120 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1f130 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1f140 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1f150 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1f160 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1f170 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1f180 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1f190 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1f1a0 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1f1b0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1f1c0 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1f1d0 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1f1e0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1f1f0 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1f200 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1f210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1f220 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1f230 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1f240 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1f250 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1f260 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1f270 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1f280 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1f290 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1f2a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1f2b0 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1f2c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1f2d0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1f2e0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1f2f0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1f300 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1f310 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1f320 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1f330 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1f340 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1f350 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1f360 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1f370 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1f380 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1f390 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1f3a0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1f3b0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1f3c0 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1f3d0 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1f3e0 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1f3f0 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1f400 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1f410 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1f420 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1f430 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1f440 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1f450 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1f460 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1f470 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1f480 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1f490 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1f4a0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1f4b0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1f4c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1f4d0 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1f4e0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1f4f0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1f500 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1f510 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1f520 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1f530 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1f540 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1f550 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1f560 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1f570 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1f580 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1f590 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1f5a0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1f5b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1f5c0 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1f5d0 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1f5e0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1f5f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1f600 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1f610 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1f620 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1f630 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1f640 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1f650 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1f660 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1f670 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1f680 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1f690 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1f6a0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1f6b0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1f6c0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1f6d0 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1f6e0 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1f6f0 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1f700 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1f710 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1f720 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1f730 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1f740 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1f750 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1f760 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1f770 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1f780 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1f790 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1f7a0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1f7b0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1f7c0 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1f7d0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1f7e0 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1f7f0 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1f800 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1f810 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f820 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1f830 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1f840 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f850 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1f860 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1f870 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1f880 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f890 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1f8a0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1f8b0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1f8c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1f8d0 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
1f8e0 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
1f8f0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
1f900 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
1f910 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
1f920 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
1f930 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
1f940 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
1f950 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f970 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
1f980 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1f990 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
1f9a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f9b0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1f9c0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1f9d0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
1f9e0 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
1f9f0 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
1fa00 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20   */.};..#define 
1fa10 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
1fa20 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66  TERNAL 0x01.#def
1fa30 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
1fa40 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a  F_SQLFUNC  0x02.
1fa50 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
1fa60 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
1fa70 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
1fa80 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64  , va_list);.void
1fa90 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
1faa0 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
1fab0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1fac0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1fad0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1fae0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
1faf0 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
1fb00 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
1fb10 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1fb20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a  va_list);.char *
1fb30 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28  sqlite3MAppendf(
1fb40 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63  sqlite3*,char*,c
1fb50 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
1fb60 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1fb70 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66  ITE_TEST) || def
1fb80 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
1fb90 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
1fba0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
1fbb0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1fbc0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
1fbd0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
1fbe0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
1fbf0 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
1fc00 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
1fc10 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72  f../* Output for
1fc20 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49  matting for SQLI
1fc30 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c  TE_TESTCTRL_EXPL
1fc40 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  AIN */.#if defin
1fc50 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1fc60 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20  _TREE_EXPLAIN). 
1fc70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1fc80 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29  lainBegin(Vdbe*)
1fc90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1fca0 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64  ExplainPrintf(Vd
1fcb0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
1fcc0 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73  , ...);.  void s
1fcd0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28  qlite3ExplainNL(
1fce0 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1fcf0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73  qlite3ExplainPus
1fd00 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1fd10 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1fd20 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  op(Vdbe*);.  voi
1fd30 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1fd40 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20  Finish(Vdbe*);. 
1fd50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1fd60 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a  lainSelect(Vdbe*
1fd70 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  , Select*);.  vo
1fd80 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1fd90 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70  nExpr(Vdbe*, Exp
1fda0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1fdb0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69  te3ExplainExprLi
1fdc0 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69  st(Vdbe*, ExprLi
1fdd0 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  st*);.  const ch
1fde0 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45  ar *sqlite3VdbeE
1fdf0 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a  xplanation(Vdbe*
1fe00 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1fe10 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1fe20 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
1fe30 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1fe40 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65  Select(A,B).# de
1fe50 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1fe60 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64  ainExpr(A,B).# d
1fe70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1fe80 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42  lainExprList(A,B
1fe90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1fea0 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28  e3ExplainFinish(
1feb0 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1fec0 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
1fed0 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  on(X) 0.#endif..
1fee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
1fef0 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
1ff00 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
1ff10 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
1ff20 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
1ff30 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
1ff40 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
1ff50 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
1ff60 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
1ff70 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
1ff80 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1ff90 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
1ffa0 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
1ffb0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1ffc0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
1ffd0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
1ffe0 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
1fff0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
20000 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
20010 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
20020 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
20030 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
20040 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
20050 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
20060 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
20070 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
20080 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
20090 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
200a0 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
200b0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
200c0 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
200d0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
200e0 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
200f0 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
20100 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
20110 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
20120 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
20130 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
20140 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
20150 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
20160 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
20170 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
20180 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
20190 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
201a0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
201b0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
201c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
201d0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
201e0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
201f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20200 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
20210 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
20220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20230 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
20240 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
20250 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
20260 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
20270 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
20280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
20290 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
202a0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
202b0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
202c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
202d0 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
202e0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
202f0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
20300 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
20310 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
20320 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
20330 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
20340 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
20350 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
20360 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
20370 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
20380 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
20390 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
203a0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
203b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
203c0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
203d0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
203e0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
203f0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
20400 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
20410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
20420 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
20430 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
20440 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50  id sqlite3BeginP
20450 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  arse(Parse*,int)
20460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
20470 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
20480 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54  ges(sqlite3*);.T
20490 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
204a0 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
204b0 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
204c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
204d0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
204e0 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
204f0 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
20500 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
20510 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
20520 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
20530 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
20540 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
20550 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
20560 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
20570 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
20580 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
20590 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
205a0 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e  d sqlite3AddNotN
205b0 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ull(Parse*, int)
205c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
205d0 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73  dPrimaryKey(Pars
205e0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
205f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
20600 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68  oid sqlite3AddCh
20610 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  eckConstraint(Pa
20620 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
20630 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
20640 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54  umnType(Parse*,T
20650 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
20660 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
20670 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53  lue(Parse*,ExprS
20680 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
20690 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
206a0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
206b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
206c0 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
206d0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c  oken*,Token*,u8,
206e0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
206f0 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
20700 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
20710 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
20720 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
20730 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
20740 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
20750 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
20760 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
20770 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
20780 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
20790 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
207a0 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66  arse *);..#ifdef
207b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
207c0 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69  LTIN_TEST.# defi
207d0 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  ne sqlite3FaultS
207e0 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  im(X) SQLITE_OK.
207f0 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69  #else.  int sqli
20800 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29  te3FaultSim(int)
20810 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63  ;.#endif..Bitvec
20820 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
20830 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
20840 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
20850 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
20860 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
20870 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
20880 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
20890 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
208a0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
208b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
208c0 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
208d0 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
208e0 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
208f0 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
20900 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
20910 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
20920 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
20930 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
20940 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
20950 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
20960 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
20970 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
20980 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
20990 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
209a0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
209b0 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
209c0 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
209d0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
209e0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
209f0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
20a00 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
20a10 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
20a20 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
20a30 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
20a40 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
20a50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
20a60 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
20a70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20a80 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
20a90 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
20aa0 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
20ab0 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
20ac0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
20ad0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
20ae0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76  A,B) 0.#endif..v
20af0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
20b00 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
20b10 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
20b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
20b30 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
20b40 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
20b50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
20b60 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
20b70 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
20b80 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
20b90 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
20ba0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
20bb0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
20bc0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
20bd0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
20be0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
20bf0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
20c00 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
20c10 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
20c20 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
20c30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20c40 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
20c50 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
20c60 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
20c70 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
20c80 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
20c90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
20ca0 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
20cb0 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
20cc0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
20cd0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
20ce0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
20cf0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
20d00 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
20d10 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
20d20 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
20d30 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
20d40 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
20d50 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
20d60 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
20d70 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
20d80 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
20d90 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
20da0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
20db0 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
20dc0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
20dd0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
20de0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
20df0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
20e30 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
20e40 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
20e50 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
20e60 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
20e70 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
20e80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
20e90 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
20ea0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
20eb0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
20ec0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
20ed0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
20ee0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
20ef0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
20f00 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
20f10 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
20f20 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
20f30 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
20f40 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
20f50 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
20f60 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
20f70 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
20f80 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
20f90 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
20fa0 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
20fb0 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ar**);.Index *sq
20fc0 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
20fd0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
20fe0 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
20ff0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
21000 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
21020 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
21030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
21040 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
21050 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
21060 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
21070 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
21080 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
21090 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
210a0 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
210b0 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
210c0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
210d0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
210f0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  r*,ExprList*,u16
21100 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76  ,Expr*,Expr*);.v
21110 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
21120 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
21130 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
21140 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
21150 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
21160 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
21170 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
21180 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
21190 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
211a0 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
211b0 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
211c0 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
211d0 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
211e0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
211f0 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
21200 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
21210 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
21220 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
21230 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
21240 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
21250 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
21260 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  xpr*,Expr*,char*
21270 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
21280 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
21290 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
212a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
212b0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
212c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
212d0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
212e0 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66  , int);.WhereInf
212f0 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
21300 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
21310 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
21320 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
21330 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
21340 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
21350 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73  ereInfo*);.u64 s
21360 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
21370 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
21380 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
21390 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
213a0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
213b0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
213c0 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
213d0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
213e0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57  3WhereIsSorted(W
213f0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
21400 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74  sqlite3WhereCont
21410 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49  inueLabel(WhereI
21420 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
21430 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65  e3WhereBreakLabe
21440 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
21450 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
21460 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e  kOnePass(WhereIn
21470 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  fo*, int*);.int 
21480 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
21490 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
214a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
214b0 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
214c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
214d0 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
214e0 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
214f0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
21500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21510 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
21520 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
21530 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21540 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
21550 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
21560 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21570 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
21580 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21590 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
215a0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
215b0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
215c0 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
215d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
215e0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
215f0 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
21600 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
21610 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
21620 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
21630 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21640 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
21650 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
21660 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
21670 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72  deFactorable(Par
21680 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
21690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
216a0 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
216b0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
216c0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
216d0 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
216e0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
216f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
21700 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
21710 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
21720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21730 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
21740 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
21750 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21760 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
21770 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
21780 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64  t*, int, u8);.#d
21790 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
217a0 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20  L_DUP      0x01 
217b0 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68   /* Deep, not sh
217c0 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a  allow copies */.
217d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
217e0 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30  CEL_FACTOR   0x0
217f0 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74  2  /* Factor out
21800 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20   constant terms 
21810 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
21820 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
21830 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
21840 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21850 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
21860 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
21870 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
21880 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
21890 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
218a0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
218b0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
218c0 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
218d0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f  e*,int isView,co
218e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
218f0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
21900 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
21910 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e  leItem(Parse*,in
21920 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20  t isView,struct 
21930 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
21940 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
21950 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
21960 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
21970 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
21980 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
21990 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
219a0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
219b0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
219c0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
219d0 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
219e0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
219f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21a00 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b  3Vacuum(Parse*);
21a10 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
21a20 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
21a30 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73  lite3*);.char *s
21a40 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
21a50 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
21a60 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
21a70 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78  e3ExprCompare(Ex
21a80 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
21a90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
21aa0 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
21ab0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
21ac0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
21ad0 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
21ae0 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  xpr(Expr*, Expr*
21af0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21b00 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
21b10 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
21b20 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
21b30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21b40 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
21b50 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
21b60 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21b70 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
21b80 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
21b90 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
21ba0 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
21bb0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
21bc0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
21bd0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
21be0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
21bf0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
21c00 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
21c10 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
21c20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21c30 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
21c40 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
21c50 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
21c60 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
21c70 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
21c80 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
21c90 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
21ca0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
21cb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21cc0 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
21cd0 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
21ce0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
21cf0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
21d00 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21d10 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
21d20 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
21d30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
21d40 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
21d50 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
21d60 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
21d70 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
21d80 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
21d90 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
21da0 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
21db0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
21dc0 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
21dd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
21de0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
21df0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a  unction(Expr*);.
21e00 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
21e10 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
21e20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
21e30 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
21e40 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
21e50 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
21e60 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
21e70 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
21e80 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
21e90 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
21ea0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21eb0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
21ec0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62  elete(Parse*,Tab
21ed0 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
21ee0 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
21ef0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
21f00 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
21f10 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65  ndexDelete(Parse
21f20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
21f30 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  int, int*);.int 
21f40 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
21f50 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
21f60 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
21f70 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
21f80 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
21f90 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
21fa0 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
21fb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21fc0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
21fd0 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
21fe0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
21ff0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22020 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
22030 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22040 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
22050 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
22060 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
22070 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
22080 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
22090 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
220a0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
220b0 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e  nt, int, u8*, in
220c0 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  t*, int*);.void 
220d0 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
220e0 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65  eOperation(Parse
220f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22100 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57  id sqlite3MultiW
22110 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  rite(Parse*);.vo
22120 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f  id sqlite3MayAbo
22130 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  rt(Parse*);.void
22140 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73   sqlite3HaltCons
22150 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
22160 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20  nt, int, char*, 
22170 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  i8, u8);.void sq
22180 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74  lite3UniqueConst
22190 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
221a0 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  t, Index*);.void
221b0 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e   sqlite3RowidCon
221c0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
221d0 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78  int, Table*);.Ex
221e0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
221f0 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
22200 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
22210 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
22220 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
22230 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
22240 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
22250 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
22260 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
22270 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
22280 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
22290 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
222a0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
222b0 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
222c0 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  elect*,int);.voi
222d0 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
222e0 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
222f0 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
22300 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
22310 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
22320 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22330 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
22340 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
22350 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
22360 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
22370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
22380 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
22390 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
223a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
223b0 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
223c0 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
223d0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
223e0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
223f0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
22400 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
22410 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22420 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
22430 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
22440 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22450 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
22460 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
22470 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
22480 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
22490 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
224a0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
224b0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
224c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
224d0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
224e0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
224f0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
22500 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
22510 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
22520 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
22550 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
22560 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
22570 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
22580 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
22590 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
225a0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
225b0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
225c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
225d0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
225e0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
225f0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
22600 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
22610 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
22620 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
22630 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
22640 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
22650 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
22660 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
22670 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
22680 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
22690 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
226a0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
226b0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226d0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
226e0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
226f0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
22700 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
22710 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
22720 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
22730 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
22740 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
22750 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
22760 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
22770 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
22780 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
22790 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
227a0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
227b0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
227c0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
227d0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
227e0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
227f0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
22800 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
22810 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
22820 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
22830 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
22860 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
22870 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
22880 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
22890 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
228a0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
228b0 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
228c0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
228d0 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
228e0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
228f0 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
22900 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
22910 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
22920 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
22930 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
22940 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
22950 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
22960 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
22970 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
22980 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
22990 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
229a0 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
229b0 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
229c0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
229d0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
229e0 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
229f0 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73  evel : (p)).#els
22a00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22a10 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
22a20 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
22a30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
22a40 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
22a50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22a60 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
22a70 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
22a80 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
22a90 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
22aa0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22ab0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
22ac0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
22ad0 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
22ae0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
22af0 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
22b00 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
22b10 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
22b20 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
22b30 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
22b40 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
22b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
22b60 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
22b70 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
22b80 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
22b90 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
22ba0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
22bb0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
22bc0 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
22bd0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
22be0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
22bf0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
22c10 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
22c20 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
22c30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22c40 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
22c50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
22c60 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
22c70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
22c80 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
22c90 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
22ca0 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
22cb0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
22cc0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22cd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22ce0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
22cf0 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
22d00 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
22d10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22d20 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
22d30 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
22d40 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
22d50 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
22d60 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
22d70 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
22d80 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
22d90 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
22da0 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
22db0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
22dc0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
22dd0 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
22de0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
22df0 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
22e00 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
22e10 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
22e20 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
22e30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
22e40 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
22e50 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
22e60 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
22e70 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
22e80 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
22e90 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
22ea0 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
22eb0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
22ec0 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
22ed0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
22ee0 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
22ef0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
22f00 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
22f10 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
22f20 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
22f30 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
22f40 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
22f50 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
22f60 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
22f70 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
22f80 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
22f90 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
22fa0 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
22fb0 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
22fc0 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
22fd0 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
22fe0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
22ff0 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
23000 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
23010 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
23020 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
23030 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
23040 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
23050 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
23060 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
23070 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
23080 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
23090 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
230a0 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
230b0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
230c0 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
230d0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
230e0 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
230f0 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
23100 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
23110 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
23120 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
23130 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
23140 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74  #endif.u64 sqlit
23150 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
23160 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  gEst);../*.** Ro
23170 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
23180 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
23190 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
231a0 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
231b0 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
231c0 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
231d0 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
231e0 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
231f0 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
23200 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20  e.  Code should 
23210 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  use the MACRO fo
23220 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68  rms below, as th
23230 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73 69  e Varint32 versi
23240 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64  ons.** are coded
23250 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73   to assume the s
23260 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65 20  ingle byte case 
23270 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c  is already handl
23280 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68  ed (which .** th
23290 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65  e MACRO form doe
232a0 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  s)..*/.int sqlit
232b0 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
232c0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
232d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  ;.int sqlite3Put
232e0 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65  Varint32(unsigne
232f0 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75  d char*, u32);.u
23300 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
23310 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
23320 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
23330 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
23340 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
23350 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
23360 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
23370 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
23380 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68  v);../*.** The h
23390 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72  eader of a recor
233a0 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  d consists of a 
233b0 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c  sequence variabl
233c0 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
233d0 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65  s..** These inte
233e0 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20  gers are almost 
233f0 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64  always small and
23400 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
23410 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a  a single byte..*
23420 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
23430 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61  macros take adva
23440 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20  ntage this fact 
23450 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73  to provide a fas
23460 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20  t encode.** and 
23470 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e  decode of the in
23480 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f  tegers in a reco
23490 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69  rd header.  It i
234a0 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65  s faster for the
234b0 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20   common.** case 
234c0 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65  where the intege
234d0 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79  r is a single by
234e0 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74  te.  It is a lit
234f0 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20  tle slower when 
23500 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
23510 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79  s two or more by
23520 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c  tes.  But overal
23530 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a  l it is faster..
23540 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
23550 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ing expressions 
23560 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
23570 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  **.**     x = sq
23580 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
23590 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20  ( A, &B );.**   
235a0 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74    x = sqlite3Put
235b0 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29  Varint32( A, B )
235c0 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  ;.**.**     x = 
235d0 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  getVarint32( A, 
235e0 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20  B );.**     x = 
235f0 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  putVarint32( A, 
23600 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  B );.**.*/.#defi
23610 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
23620 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
23630 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
23640 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
23650 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
23660 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
23670 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
23680 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
23690 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
236a0 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
236b0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
236c0 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
236d0 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
236e0 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
236f0 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
23700 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
23710 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
23720 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
23730 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
23740 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
23750 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
23760 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f   *, Index *);.vo
23770 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
23780 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
23790 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
237a0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
237b0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
237c0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
237d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
237e0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
237f0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
23800 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
23810 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
23820 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
23830 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
23840 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
23850 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
23860 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
23870 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20  Error(sqlite3*, 
23880 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
23890 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,...);.void *sql
238a0 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
238b0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
238c0 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
238d0 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
238e0 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
238f0 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
23900 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
23910 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
23920 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
23930 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
23940 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71   .const char *sq
23950 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
23960 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
23970 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
23980 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
23990 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
239a0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
239b0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
239c0 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
239d0 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
239e0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
239f0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
23a00 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
23a10 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
23a20 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
23a30 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
23a40 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
23a50 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
23a60 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
23a70 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
23a80 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
23a90 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
23aa0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
23ab0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
23ac0 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
23ad0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
23ae0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
23af0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
23b00 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
23b10 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
23b20 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
23b30 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
23b40 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
23b50 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
23b60 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
23b70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
23b80 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
23b90 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
23ba0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
23bb0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
23bc0 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
23bd0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
23be0 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
23bf0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
23c00 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
23c10 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
23c20 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
23c30 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
23c40 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
23c50 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
23c60 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
23c70 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
23c80 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
23c90 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
23ca0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
23cb0 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  ,int);..const vo
23cc0 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
23cd0 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
23ce0 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
23cf0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
23d00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
23d10 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
23d20 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
23d30 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
23d40 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
23d50 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
23d60 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
23d70 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
23d80 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
23d90 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
23da0 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
23db0 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
23dc0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
23dd0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
23de0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
23df0 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
23e00 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
23e10 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
23e20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
23e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
23e40 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
23e50 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
23e60 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
23e70 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
23e80 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
23e90 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
23ea0 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
23eb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23ec0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
23ed0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
23ee0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
23ef0 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
23f00 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
23f10 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
23f20 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
23f30 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
23f40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
23f50 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
23f60 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
23f70 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
23f80 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
23f90 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
23fa0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
23fb0 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
23fc0 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
23fd0 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
23fe0 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  te3GlobalFunctio
23ff0 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
24000 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
24010 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
24020 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
24030 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
24040 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
24050 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
24060 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24070 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
24080 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
24090 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
240a0 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
240b0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
240c0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
240d0 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
240e0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
240f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
24100 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
24110 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
24120 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
24130 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
24140 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
24150 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
24160 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
24170 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
24180 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
24190 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
241a0 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ct(Parse *, Expr
241b0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
241c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
241d0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
241e0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
241f0 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
24200 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
24210 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24220 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
24230 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24240 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
24250 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
24260 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
24270 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
24280 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
24290 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
242a0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
242b0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
242c0 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
242d0 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
242e0 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
242f0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
24300 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
24310 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
24320 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
24330 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
24340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
24350 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
24360 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
24370 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24380 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
24390 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
243a0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
243b0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
243c0 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
243d0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
243e0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
243f0 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
24400 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
24410 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
24420 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
24430 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
24440 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
24450 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
24460 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
24470 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
24480 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
24490 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
244a0 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
244b0 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
244c0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
244d0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
244e0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
244f0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
24500 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
24510 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
24520 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
24530 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
24540 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
24550 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
24560 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
24570 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
24580 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
24590 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
245a0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
245b0 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
245c0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
245d0 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
245e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
245f0 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74  inimumFileFormat
24600 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
24610 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24620 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
24630 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
24640 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
24650 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
24660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
24670 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
24680 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
24690 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
246a0 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
246b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
246c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
246d0 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
246e0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
246f0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
24700 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
24710 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
24720 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
24730 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
24740 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24750 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
24760 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
24770 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
24780 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
24790 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
247a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
247b0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
247c0 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
247d0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
247e0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
247f0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
24800 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
24810 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
24820 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
24830 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
24840 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
24850 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
24860 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
24870 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
24880 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
24890 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
248a0 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
248b0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
248c0 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
248d0 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
248e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
248f0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
24900 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
24910 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
24920 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
24930 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
24940 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
24950 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
24960 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53  te3AppendSpace(S
24970 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63  trAccum*,int);.c
24980 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
24990 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
249a0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
249b0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
249c0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
249d0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
249e0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
249f0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
24a00 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
24a10 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
24a20 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
24a30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
24a40 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
24a50 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
24a60 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
24a70 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
24a80 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
24a90 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
24aa0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
24ab0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
24ac0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
24ad0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
24ae0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
24af0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
24b00 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
24b10 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
24b20 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
24b30 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
24b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24b50 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
24b60 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
24b70 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
24b80 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
24b90 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
24ba0 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
24bb0 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
24bc0 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73  Alloc(void*(*)(s
24bd0 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71  ize_t));.void sq
24be0 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
24bf0 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
24c00 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
24c10 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
24c20 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
24c30 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
24c40 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
24c50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
24c60 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
24c70 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
24c80 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
24c90 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
24ca0 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
24cb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
24cc0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
24cd0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
24ce0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
24cf0 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
24d00 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
24d10 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
24d20 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
24d30 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
24d40 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
24d50 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
24d60 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
24d70 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
24d80 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
24d90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
24da0 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
24db0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
24dc0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
24dd0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
24de0 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
24df0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
24e00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
24e10 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
24e20 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
24e30 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
24e40 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
24e50 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
24e60 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
24e70 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
24e80 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
24e90 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
24ea0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
24eb0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
24ec0 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
24ed0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
24ee0 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
24ef0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
24f00 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
24f10 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
24f20 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
24f30 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
24f40 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
24f50 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
24f60 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
24f70 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
24f80 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
24f90 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
24fa0 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
24fb0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
24fc0 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
24fd0 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
24fe0 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
24ff0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
25000 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
25010 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
25020 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
25030 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
25040 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
25050 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
25060 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
25070 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
25080 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
25090 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
250a0 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
250b0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
250c0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
250d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
250e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
250f0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
25100 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
25110 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
25120 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
25130 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
25140 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
25150 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
25160 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
25170 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
25180 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
25190 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
251a0 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
251b0 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
251c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
251d0 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
251e0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
251f0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
25200 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
25210 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
25220 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
25230 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
25240 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
25250 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
25260 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
25270 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
25280 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
25290 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
252a0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
252b0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
252c0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
252d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
252e0 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
252f0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
25300 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
25310 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
25320 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
25330 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
25340 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
25350 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
25360 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
25370 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
25380 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
25390 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
253a0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
253b0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
253c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
253d0 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
253e0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
253f0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
25400 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
25410 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
25420 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
25430 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
25440 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
25450 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
25460 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
25470 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25480 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
25490 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
254a0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
254b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
254c0 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
254d0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
254e0 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
254f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25500 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
25510 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
25520 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
25530 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25540 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
25550 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
25560 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
25570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
25580 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
25590 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
255a0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
255b0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
255c0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
255d0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
255e0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
255f0 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
25600 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
25610 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
25620 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
25630 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
25640 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
25650 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
25660 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
25670 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
25680 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
25690 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
256a0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
256b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
256c0 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
256d0 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
256e0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
256f0 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
25700 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
25710 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
25720 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
25730 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
25740 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
25750 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
25760 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
25770 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
25780 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
25790 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
257a0 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
257b0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
257c0 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
257d0 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
257e0 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
257f0 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
25800 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
25810 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
25820 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
25830 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
25840 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
25850 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
25860 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
25870 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
25880 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
25890 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
258a0 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20  ionality is .** 
258b0 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
258c0 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
258d0 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
258e0 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
258f0 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
25900 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25910 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
25920 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
25930 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
25940 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
25950 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
25960 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
25970 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
25980 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
25990 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
259a0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
259b0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
259c0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
259d0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
259e0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
259f0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
25a00 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
25a10 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
25a20 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
25a30 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
25a40 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
25a50 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
25a60 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
25a70 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
25a80 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
25a90 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
25aa0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
25ab0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
25ac0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
25ad0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25ae0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
25af0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
25b00 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
25b10 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
25b20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
25b30 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
25b40 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a  ,d)    0.#endif.
25b50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25b60 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
25b70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
25b80 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
25b90 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
25ba0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
25bb0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
25bc0 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
25bd0 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
25be0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
25bf0 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
25c00 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
25c10 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
25c20 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
25c30 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
25c40 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
25c50 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
25c60 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
25c70 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
25c80 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
25c90 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
25ca0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
25cb0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
25cc0 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
25cd0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
25ce0 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
25cf0 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
25d00 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
25d10 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
25d20 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
25d30 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
25d40 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49  nt if SQLITE_OMI
25d50 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a  T_BUILTIN_TEST.*
25d60 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
25d70 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
25d80 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
25d90 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
25da0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
25db0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
25dc0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
25dd0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
25de0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
25df0 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
25e00 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
25e10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
25e20 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
25e30 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20  #endif..#define 
25e40 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
25e50 20 20 20 20 20 20 20 20 20 31 0a 23 64 65 66 69           1.#defi
25e60 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
25e70 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 23 64              2.#d
25e80 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
25e90 4e 44 45 58 5f 41 53 43 20 20 20 20 20 20 20 33  NDEX_ASC       3
25ea0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
25eb0 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 20  X_INDEX_DESC    
25ec0 20 20 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 46    4.int sqlite3F
25ed0 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
25ee0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a   *, Expr *, int*
25ef0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
25f00 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
25f10 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
25f20 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
25f30 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
25f40 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
25f50 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
25f60 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
25f70 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
25f80 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
25f90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
25fa0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
25fb0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
25fc0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
25fd0 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
25fe0 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
25ff0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26000 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
26010 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
26020 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
26030 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
26040 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
26050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
26060 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
26070 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
26080 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
26090 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
260a0 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
260b0 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
260c0 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49  le *);..#if SQLI
260d0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
260e0 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
260f0 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
26100 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
26110 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
26120 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
26130 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
26140 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
26150 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
26160 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
26170 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
26180 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
26190 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  t(x,y).  #define
261a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
261b0 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
261c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
261d0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
261e0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
261f0 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
26200 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
26210 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
26220 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
26230 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26240 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
26250 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
26260 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
26270 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
26280 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
26290 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
262a0 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
262b0 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
262c0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
262d0 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
262e0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
262f0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
26300 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
26310 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26320 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
26330 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
26340 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
26350 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
26360 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
26370 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
26380 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
26390 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
263a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
263b0 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
263c0 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
263d0 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
263e0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
263f0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
26400 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
26410 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
26420 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
26430 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
26440 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
26450 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26460 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
26470 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
26480 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
26490 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
264a0 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
264b0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
264c0 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
264d0 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  ;.SQLITE_EXTERN 
264e0 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f  void (*sqlite3Io
264f0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
26500 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
26510 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
26520 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
26530 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
26540 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
26550 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
26560 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
26570 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
26580 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
26590 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
265a0 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
265b0 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
265c0 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
265d0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
265e0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
265f0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
26600 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
26610 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
26620 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
26630 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
26640 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
26650 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
26660 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
26670 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
26680 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
26690 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
266a0 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
266b0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
266c0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
266d0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
266e0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
266f0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
26700 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
26710 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
26720 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
26730 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
26740 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
26750 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
26760 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
26770 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
26780 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
26790 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
267a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
267b0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
267c0 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
267d0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
267e0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
267f0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
26800 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
26810 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
26820 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
26830 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
26840 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
26850 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
26860 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
26870 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
26880 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
26890 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
268a0 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
268b0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
268c0 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
268d0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
268e0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
268f0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
26900 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
26910 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
26920 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
26930 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
26940 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
26950 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
26960 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
26970 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
26980 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
26990 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
269a0 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
269b0 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
269c0 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
269d0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
269e0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
269f0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
26a00 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
26a10 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
26a20 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
26a30 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
26a40 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
26a50 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
26a60 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
26a70 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
26a80 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
26a90 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
26aa0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
26ab0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
26ac0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
26ad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
26ae0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
26af0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
26b00 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
26b10 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
26b20 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
26b30 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
26b40 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
26b50 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
26b60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26b70 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
26b80 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
26b90 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
26ba0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
26bb0 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
26bc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
26bd0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
26be0 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
26bf0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
26c00 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
26c10 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
26c20 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
26c30 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
26c40 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
26c50 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   Might have been
26c60 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
26c70 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  y */.#define MEM
26c80 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20  TYPE_SCRATCH    
26c90 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68  0x04  /* Scratch
26ca0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
26cb0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
26cc0 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20  PCACHE     0x08 
26cd0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61   /* Page cache a
26ce0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
26cf0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42  efine MEMTYPE_DB
26d00 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f           0x10  /
26d10 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62  * Uses sqlite3Db
26d20 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69  Malloc, not sqli
26d30 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65  te_malloc */..#e
26d40 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
26d50 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.