/ Hex Artifact Content
Login

Artifact 63656cfa5a8221c3eb1a182e97d61b1fe2dfd7da:


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 74 65 73 20 61 72 65 20 73 75 70 70 6f 73 65  ites are suppose
45a0: 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73   to be estimates
45b0: 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76  ,.** not exact v
45c0: 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72  alues, this impr
45d0: 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61  ecision is not a
45e0: 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20   problem..**.** 
45f0: 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72  "LogEst" is shor
4600: 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 69  t for "Logarithi
4610: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
4620: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
4630: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
4640: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
4650: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
4660: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
4670: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
4680: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
4690: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
46a0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
46b0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
46c0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
46d0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
46e0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
46f0: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
4700: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
4710: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
4720: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
4730: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
4740: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
4750: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
4760: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
4770: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
4780: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
4790: 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c  lues. .** Exampl
47a0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35  es:.**.**    0.5
47b0: 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20   -> -10         
47c0: 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20    0.1 -> -33    
47d0: 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34      0.0625 -> -4
47e0: 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54  0.*/.typedef INT
47f0: 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a  16_TYPE LogEst;.
4800: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
4810: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
4820: 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69  er the machine i
4830: 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20  s big or little 
4840: 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77  endian,.** and w
4850: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
4860: 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e  at determination
4870: 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20   is run-time or 
4880: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a  compile-time..**
4890: 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72  .** For best per
48a0: 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74  formance, an att
48b0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
48c0: 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79 74  guess at the byt
48d0: 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67  e-order.** using
48e0: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
48f0: 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74  macros.  If that
4900: 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c   is unsuccessful
4910: 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c  , or if.** -DSQL
4920: 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45  ITE_RUNTIME_BYTE
4930: 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20  ORDER=1 is set, 
4940: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
4950: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
4960: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
4970: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
4980: 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73  MALGAMATION.cons
4990: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
49a0: 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65   = 1;.#else.exte
49b0: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
49c0: 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a  ite3one;.#endif.
49d0: 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33 38  #if (defined(i38
49e0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
49f0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
4a00: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
4a10: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64  ) ||    \.     d
4a20: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29  efined(__x86_64)
4a30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
4a40: 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  6_64__) || defin
4a50: 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20  ed(_M_X64)  ||  
4a60: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
4a70: 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65  (_M_AMD64) || de
4a80: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
4a90: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
4aa0: 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20  86)   ||    \.  
4ab0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d     defined(__arm
4ac0: 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65 64  __)) && !defined
4ad0: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
4ae0: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
4af0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
4b00: 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 64  RDER    1234.# d
4b10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
4b20: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
4b30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
4b40: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
4b50: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
4b60: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
4b70: 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69  TF16LE.#endif.#i
4b80: 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72 63  f (defined(sparc
4b90: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
4ba0: 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20  __ppc__))  \.   
4bb0: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
4bc0: 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45  ITE_RUNTIME_BYTE
4bd0: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
4be0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
4bf0: 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e      4321.# defin
4c00: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
4c10: 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65  AN    1.# define
4c20: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
4c30: 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20  DIAN 0.# define 
4c40: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
4c50: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
4c60: 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  BE.#endif.#if !d
4c70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59  efined(SQLITE_BY
4c80: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
4c90: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
4ca0: 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30  ER    0     /* 0
4cb0: 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20   means "unknown 
4cc0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22  at compile-time"
4cd0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
4ce0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
4cf0: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
4d00: 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64  ite3one)==0).# d
4d10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
4d20: 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61  TLEENDIAN (*(cha
4d30: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
4d40: 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53  )==1).# define S
4d50: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
4d60: 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  E  (SQLITE_BIGEN
4d70: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
4d80: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
4d90: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
4da0: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
4db0: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
4dc0: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
4dd0: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
4de0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
4df0: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
4e00: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
4e10: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
4e20: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
4e30: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
4e40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
4e50: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
4e60: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
4e70: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
4e80: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
4e90: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
4ea0: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
4eb0: 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64  4)../* .** Round
4ec0: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
4ed0: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
4ee0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
4ef0: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
4f00: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
4f10: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
4f20: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
4f30: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
4f40: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
4f50: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
4f60: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
4f70: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
4f80: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
4f90: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
4fa0: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
4fb0: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
4fc0: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
4fd0: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
4fe0: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
4ff0: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
5000: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
5010: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
5020: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
5030: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
5040: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
5050: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
5060: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
5070: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
5080: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
5090: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
50a0: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
50b0: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
50c0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
50d0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
50e0: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
50f0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
5100: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
5110: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
5120: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
5130: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
5140: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
5150: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
5160: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
5170: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
5180: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
5190: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
51a0: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
51b0: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
51c0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
51d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
51e0: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
51f0: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
5200: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
5210: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
5220: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
5230: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
5240: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
5250: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
5260: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5270: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5280: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
5290: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
52a0: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
52b0: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
52c0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
52d0: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
52e0: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
52f0: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
5300: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
5310: 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50   if TARGET_OS_IP
5320: 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53  HONE.#   undef S
5330: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5340: 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53  IZE.#   define S
5350: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5360: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
5370: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
5380: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5390: 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f  E.# if defined(_
53a0: 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c  _linux__) \.  ||
53b0: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
53c0: 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64   \.  || (defined
53d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64  (__APPLE__) && d
53e0: 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29  efined(__MACH__)
53f0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
5400: 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69  (__sun).#   defi
5410: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
5420: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
5430: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
5440: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
5450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5460: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
5470: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
5480: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5490: 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c  IZE_xc 1 /* excl
54a0: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
54b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
54c0: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d  * The default MM
54d0: 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20  AP_SIZE is zero 
54e0: 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73  on all platforms
54f0: 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61  .  Or, even if a
5500: 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75   larger.** defau
5510: 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20  lt MMAP_SIZE is 
5520: 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d  specified at com
5530: 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20  pile-time, make 
5540: 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f 65  sure that it doe
5550: 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20  s.** not exceed 
5560: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70  the maximum mmap
5570: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65   size..*/.#ifnde
5580: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5590: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
55a0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
55b0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  LT_MMAP_SIZE 0.#
55c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
55d0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
55e0: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
55f0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
5600: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  /.#endif.#if SQL
5610: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5620: 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58  _SIZE>SQLITE_MAX
5630: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64  _MMAP_SIZE.# und
5640: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5650: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
5660: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
5670: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51  ULT_MMAP_SIZE SQ
5680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5690: 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ZE.#endif../*.**
56a0: 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c   Only one of SQL
56b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
56c0: 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   or SQLITE_ENABL
56d0: 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64  E_STAT4 can be d
56e0: 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72  efined..** Prior
56f0: 69 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20  ity is given to 
5700: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5710: 41 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20  AT4.  If either 
5720: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73  are defined, als
5730: 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49  o.** define SQLI
5740: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5750: 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64  OR_STAT4.*/.#ifd
5760: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5770: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
5780: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5790: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
57a0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
57b0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
57c0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
57d0: 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51  TAT3.# define SQ
57e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
57f0: 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c  3_OR_STAT4 1.#el
5800: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
5810: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
5820: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
5830: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5840: 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TAT4.#endif../*.
5850: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
5860: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5870: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
5880: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
5890: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
58a0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
58b0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
58c0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
58d0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
58e0: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
58f0: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
5900: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
5910: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
5920: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
5930: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
5940: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
5950: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
5960: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
5970: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
5980: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
5990: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
59a0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
59b0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
59c0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
59d0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
59e0: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
59f0: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
5a00: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
5a10: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
5a20: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
5a30: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
5a40: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
5a50: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
5a60: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
5a70: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
5a80: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
5a90: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
5aa0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
5ab0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
5ac0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
5ad0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
5ae0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
5af0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
5b00: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
5b10: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
5b20: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
5b30: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
5b40: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
5b50: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
5b60: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
5b70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
5b80: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
5b90: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
5ba0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
5bb0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
5bc0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
5bd0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
5be0: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
5bf0: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
5c00: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
5c10: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
5c20: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
5c30: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
5c40: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
5c50: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
5c60: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
5c70: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
5c80: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
5c90: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
5ca0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
5cb0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
5cc0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
5cd0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
5ce0: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
5cf0: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
5d00: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
5d10: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
5d20: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
5d30: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
5d40: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
5d50: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
5d60: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
5d70: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
5d80: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
5d90: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
5da0: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
5db0: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
5dc0: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
5dd0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
5de0: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
5df0: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
5e00: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
5e10: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
5e20: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
5e30: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
5e40: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
5e50: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
5e60: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
5e70: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
5e80: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
5e90: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
5ea0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
5eb0: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
5ec0: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
5ed0: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
5ee0: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
5ef0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
5f00: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
5f10: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
5f20: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
5f30: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
5f40: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
5f50: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
5f60: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
5f70: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
5f80: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
5f90: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
5fa0: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
5fb0: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
5fc0: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
5fd0: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
5fe0: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
5ff0: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
6000: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
6010: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
6020: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
6030: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
6040: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
6050: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
6060: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
6070: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
6080: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
6090: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
60a0: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
60b0: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
60c0: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
60d0: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
60e0: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
60f0: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
6100: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
6110: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
6120: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
6130: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
6140: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
6150: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6160: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
6170: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
6180: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
6190: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
61a0: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
61b0: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
61c0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
61d0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
61e0: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
61f0: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
6200: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
6210: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
6220: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
6230: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
6240: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
6250: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
6260: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
6270: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
6280: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
6290: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
62a0: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
62b0: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
62c0: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
62d0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
62e0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
62f0: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
6300: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
6310: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
6320: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
6330: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
6340: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
6350: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
6360: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
6370: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
6380: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
6390: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
63a0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
63b0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
63c0: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
63d0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
63e0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
63f0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6400: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
6410: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
6420: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
6430: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
6440: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
6450: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
6460: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
6470: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
6480: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
6490: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
64a0: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
64b0: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
64c0: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
64d0: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
64e0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
64f0: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
6500: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
6510: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
6520: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
6530: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
6540: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
6550: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
6560: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
6570: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
6580: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
6590: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
65a0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
65b0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
65c0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
65d0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
65e0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
65f0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
6600: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
6610: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
6620: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
6630: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
6640: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
6650: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
6660: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
6670: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
6680: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
6690: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
66a0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
66b0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
66c0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
66d0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
66e0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
66f0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
6700: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
6710: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
6720: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
6730: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
6740: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
6750: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
6760: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
6770: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
6780: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
6790: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
67a0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
67b0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
67c0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
67d0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
67e0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
67f0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
6800: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
6810: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
6820: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
6830: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
6840: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
6850: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6860: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
6870: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
6880: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
6890: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
68a0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
68b0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
68c0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
68d0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
68e0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
68f0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
6900: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
6910: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
6920: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
6930: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
6940: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
6950: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
6960: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
6970: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
6980: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
6990: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
69a0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
69b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
69c0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
69d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
69e0: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
69f0: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
6a00: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
6a10: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
6a20: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
6a30: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
6a40: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
6a50: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
6a60: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
6a70: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
6a80: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
6a90: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
6aa0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
6ab0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
6ac0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6ad0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
6ae0: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
6af0: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
6b00: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
6b10: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
6b20: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
6b30: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6b40: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
6b50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
6b60: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
6b70: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
6b80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
6b90: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
6ba0: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
6bb0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
6bc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6bd0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
6be0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6bf0: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
6c00: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
6c10: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
6c20: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6c30: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
6c40: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
6c50: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
6c60: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6c70: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
6c80: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
6c90: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
6ca0: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
6cb0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
6cc0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6cd0: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
6ce0: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
6cf0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
6d00: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
6d10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d20: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
6d30: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
6d40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
6d50: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
6d60: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
6d70: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
6d80: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
6d90: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
6da0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
6db0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
6dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
6dd0: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
6de0: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
6df0: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
6e00: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
6e10: 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22  e "u8" and .** "
6e20: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
6e30: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
6e40: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
6e50: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
6e60: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
6e70: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
6e80: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
6e90: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
6ea0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
6eb0: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
6ec0: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
6ed0: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23  de "pcache.h"..#
6ee0: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
6ef0: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
6f00: 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  ".../*.** Each d
6f10: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
6f20: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
6f30: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
6f40: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
6f50: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
6f60: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
6f70: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
6f80: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
6f90: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
6fa0: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
6fb0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
6fc0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
6fd0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
6fe0: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
6ff0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
7000: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
7010: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
7020: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
7030: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
7040: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
7050: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
7060: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
7070: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
7080: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
7090: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
70a0: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
70b0: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
70c0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
70d0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
70e0: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
70f0: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
7100: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
7110: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
7120: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
7130: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
7140: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
7150: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
7160: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
7170: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7180: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
7190: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
71a0: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53  ma..**.** Most S
71b0: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
71c0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
71d0: 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20  h a Btree.  The 
71e0: 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20  exception is.** 
71f0: 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74  the Schema for t
7200: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73  he TEMP databaes
7210: 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d   (sqlite3.aDb[1]
7220: 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d  ) which is free-
7230: 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20  standing..** In 
7240: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
7250: 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65  e, a single Sche
7260: 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65  ma object can be
7270: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
7280: 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68  ple.** Btrees th
7290: 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the 
72a0: 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  same underlying 
72b0: 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e  BtShared object.
72c0: 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  .** .** Schema o
72d0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
72e0: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
72f0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
7300: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
7310: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
7320: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
7330: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
7340: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
7350: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
7360: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
7370: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
7380: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
7390: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
73a0: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
73b0: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
73c0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
73d0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
73e0: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
73f0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
7400: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
7410: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
7420: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
7430: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
7440: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
7450: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
7460: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
7470: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
7480: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
7490: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
74a0: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
74b0: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
74c0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
74d0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
74e0: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
74f0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
7500: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
7510: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7520: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
7530: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
7540: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
7550: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
7560: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
7570: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
7580: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
7590: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
75a0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
75b0: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
75c0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
75d0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
75e0: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
75f0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
7600: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
7610: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
7620: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
7630: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
7640: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
7650: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
7660: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
7670: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
7680: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
7690: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
76a0: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
76b0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
76d0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
76e0: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
76f0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c  base */.  u16 fl
7700: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
7710: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
7720: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
7730: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
7740: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
7750: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
7760: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
7770: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
7780: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
7790: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
77a0: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
77b0: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
77c0: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
77d0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
77e0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
77f0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
7800: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
7810: 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29  hema->flags&(P))
7820: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
7830: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
7840: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
7850: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
7860: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
7870: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
7880: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
7890: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
78a0: 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  ma->flags|=(P).#
78b0: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
78c0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
78d0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
78e0: 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  ema->flags&=~(P)
78f0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
7900: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44  values for the D
7910: 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  B.pSchema->flags
7920: 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68   field..**.** Th
7930: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
7940: 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66  d flag is set af
7950: 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ter the database
7960: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7970: 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e  .** read into in
7980: 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c  ternal hash tabl
7990: 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72  es..**.** DB_Unr
79a0: 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20  esetViews means 
79b0: 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  that one or more
79c0: 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75   views have colu
79d0: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a  mn names that.**
79e0: 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65   have been fille
79f0: 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73  d out.  If the s
7a00: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
7a10: 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  hese column name
7a20: 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67  s might.** chang
7a30: 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69  es and so the vi
7a40: 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ew will need to 
7a50: 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65  be reset..*/.#de
7a60: 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f  fine DB_SchemaLo
7a70: 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20  aded    0x0001  
7a80: 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61  /* The schema ha
7a90: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
7aa0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65  .#define DB_Unre
7ab0: 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30  setViews    0x00
7ac0: 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77  02  /* Some view
7ad0: 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63  s have defined c
7ae0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23  olumn names */.#
7af0: 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20  define DB_Empty 
7b00: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34            0x0004
7b10: 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73    /* The file is
7b20: 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30   empty (length 0
7b30: 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a   bytes) */../*.*
7b40: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
7b50: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
7b60: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
7b70: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
7b80: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
7b90: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
7ba0: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
7bb0: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
7bc0: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  (SQLITE_LIMIT_TR
7bd0: 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a  IGGER_DEPTH+1)..
7be0: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
7bf0: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
7c00: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
7c10: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
7c20: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
7c30: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
7c40: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
7c50: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
7c60: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
7c70: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
7c80: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
7c90: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
7ca0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
7cb0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
7cc0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
7cd0: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
7ce0: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
7cf0: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
7d00: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
7d10: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
7d20: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
7d30: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
7d40: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
7d50: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
7d60: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
7d70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
7d80: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
7d90: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
7da0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
7db0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
7dc0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
7dd0: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
7de0: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
7df0: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
7e00: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
7e10: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
7e20: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
7e30: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
7e40: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
7e50: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
7e60: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
7e70: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
7e80: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
7e90: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
7ea0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
7eb0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
7ec0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
7ed0: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
7ee0: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
7ef0: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
7f00: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
7f10: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
7f20: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
7f30: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
7f40: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
7f50: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
7f60: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
7f70: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
7f80: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
7f90: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
7fa0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
7fb0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
7fc0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
7fd0: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
7fe0: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
7ff0: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
8000: 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20  16 sz;          
8010: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
8020: 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e  f each buffer in
8030: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62   bytes */.  u8 b
8040: 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
8050: 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20      /* False to 
8060: 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b  disable new look
8070: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
8080: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
8090: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
80a0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
80b0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
80c0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
80d0: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
80f0: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
8100: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
8110: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
8120: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
8130: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
8140: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
8150: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
8160: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
8170: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
8180: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
8190: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
81a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
81b0: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
81c0: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
81d0: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
81e0: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
81f0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
8200: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
8210: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
8220: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
8230: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
8240: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
8250: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
8260: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
8270: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
8280: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
8290: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
82a0: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
82b0: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
82c0: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
82d0: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
82e0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
82f0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73  tions..**.** Has
8300: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
8310: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
8320: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
8330: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
8340: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
8350: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
8360: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
8370: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
8380: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
8390: 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a  *a[23];       /*
83a0: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
83b0: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
83c0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
83d0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
83e0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
83f0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
8400: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
8410: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
8420: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
8430: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
8440: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
8450: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
8460: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
8470: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8480: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
8490: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
84a0: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
84b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
84c0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
84d0: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
84e0: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
84f0: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
8500: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
8510: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
8520: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8540: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
8550: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8570: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
8580: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
8590: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
85a0: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
85b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
85c0: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
85d0: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
85e0: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8600: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
8610: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
8620: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
8630: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
8640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8650: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
8660: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
8670: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
8680: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
8690: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
86a0: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
86b0: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
86c0: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
86d0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
86e0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
86f0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
8700: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8720: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
8730: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
8740: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
8750: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8770: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
8780: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
8790: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
87a0: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
87b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
87c0: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
87d0: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
87e0: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
87f0: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
8800: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
8810: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
8820: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
8830: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
8840: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
8850: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
8860: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
8870: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
8880: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
8890: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
88a0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
88b0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
88c0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
88d0: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
88e0: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
88f0: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
8900: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
8910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
8920: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
8930: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
8940: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
8950: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
8960: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
8970: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
8980: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
8990: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
89a0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
89b0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
89c0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
89d0: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
89e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
89f0: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
8a00: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
8a10: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
8a20: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
8a30: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
8a40: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
8a50: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
8a60: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
8a70: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
8a80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8a90: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
8aa0: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
8ab0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
8ac0: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ae0: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
8af0: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
8b00: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
8b10: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
8b20: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
8b30: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75  Limits */.  stru
8b40: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
8b50: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
8b60: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
8b70: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
8b80: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
8b90: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
8ba0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
8bb0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
8bc0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
8bd0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bf0: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
8c00: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
8c10: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
8c20: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
8c30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
8c40: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
8c50: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
8c60: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
8c70: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
8c80: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
8c90: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
8ca0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d  P trigger */.  }
8cb0: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
8cc0: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
8cd0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8ce0: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
8cf0: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
8d00: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8d20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
8d30: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
8d40: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
8d50: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8d70: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
8d80: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
8d90: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
8da0: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
8dd0: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
8de0: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
8df0: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
8e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8e10: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
8e20: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
8e30: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
8e40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8e50: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
8e60: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
8e70: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
8e80: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
8e90: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
8ea0: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
8eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
8ec0: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
8ef0: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
8f00: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
8f10: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
8f20: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
8f30: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
8f40: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
8f50: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 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 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
8f80: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
8f90: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
8fa0: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8fc0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
8fd0: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
8fe0: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
8ff0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
9000: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
9010: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
9020: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
9030: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
9040: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9050: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
9060: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
9070: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
9080: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
9090: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
90a0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
90b0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
90c0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
90d0: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
90e0: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
90f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9100: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
9110: 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53  nt64);.#ifndef S
9120: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
9130: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
9140: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
9150: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
9160: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
9170: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
9180: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
9190: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
91a0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
91b0: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
91c0: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
91d0: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
91e0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
91f0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
9200: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
9210: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
9220: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
9230: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
9240: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
9250: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e   message */.  un
9260: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
9270: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
9280: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
9290: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
92a0: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
92b0: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
92c0: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
92d0: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
92e0: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
92f0: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
9300: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
9310: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
9320: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
9330: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
9340: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
9350: 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29  N.  int (*xAuth)
9360: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
9370: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9380: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
9390: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20  onst 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 20 20 2f 2a 20               /* 
93c0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
93d0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
93e0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
93f0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
9400: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
9410: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
9420: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
9430: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9440: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
9450: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
9460: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
9470: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
9480: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
9490: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
94a0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
94b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
94c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
94d0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
94e0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
94f0: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
9500: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
9510: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
9520: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
9530: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
9540: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
9550: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
9560: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
9570: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
9580: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
9590: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
95a0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
95b0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
95c0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
95d0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
95e0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
95f0: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
9600: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
9610: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
9620: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
9630: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
9640: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
9650: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
9660: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
9670: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
9680: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
9690: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
96a0: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
96b0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
96c0: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  () */.#endif.  F
96d0: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
96e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
96f0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
9700: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
9710: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
9720: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
9730: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
9740: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
9750: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
9760: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
9770: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
9780: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
9790: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
97a0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
97b0: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
97c0: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
97d0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
97e0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
97f0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
9800: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
9810: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
9820: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
9830: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
9840: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
9850: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
9860: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
9870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9880: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
9890: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
98a0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
98b0: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
98c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
98d0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
98e0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
98f0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
9900: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
9910: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
9920: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
9930: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
9940: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
9950: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
9960: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
9970: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
9980: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
9990: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
99a0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
99b0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
99c0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
99d0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66  DbFree() */..#if
99e0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
99f0: 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
9a00: 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
9a10: 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ng variables are
9a20: 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62   all protected b
9a30: 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53  y the STATIC_MAS
9a40: 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  TER .  ** mutex,
9a50: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
9a60: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
9a70: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
9a80: 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a  notify.c. .  **.
9a90: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
9aa0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
9ab0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
9ac0: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
9ad0: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
9ae0: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
9af0: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
9b00: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
9b10: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
9b20: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
9b30: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
9b40: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
9b50: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
9b60: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
9b70: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
9b80: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
9b90: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
9ba0: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
9bb0: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
9bc0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
9bd0: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
9be0: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
9bf0: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
9c00: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
9c10: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
9c20: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
9c30: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
9c40: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
9c50: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
9c60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9c70: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
9c80: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
9c90: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
9ca0: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
9cb0: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
9cc0: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
9cd0: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
9ce0: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
9cf0: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
9d00: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
9d10: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
9d20: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
9d30: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
9d40: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
9d50: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
9d60: 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  /.#define ENC(db
9d70: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
9d80: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f  pSchema->enc)../
9d90: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
9da0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
9db0: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23  ite3.flags..*/.#
9dc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
9dd0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
9de0: 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65  0000001  /* True
9df0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
9e00: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
9e10: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  ine SQLITE_Inter
9e20: 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30  nChanges  0x0000
9e30: 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0002  /* Uncommi
9e40: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
9e50: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
9e60: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
9e70: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30  ync      0x00000
9e80: 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  004  /* Use full
9e90: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
9ea0: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
9eb0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
9ec0: 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30  FSync  0x0000000
9ed0: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
9ee0: 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f  sync for checkpo
9ef0: 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
9f00: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
9f10: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
9f20: 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20   /* OK to spill 
9f30: 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23  pager cache */.#
9f40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
9f50: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
9f60: 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77  0000020  /* Show
9f70: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
9f80: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
9f90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
9fa0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
9fb0: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
9fc0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
9fd0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
9fe0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
9ff0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
a000: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
a010: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
a020: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
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 20                  
a050: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
a060: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
a070: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
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 20 20                  
a0a0: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
a0b0: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
a0c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a0d0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
a0e0: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
a0f0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
a100: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
a110: 20 2a 2f 0a 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 20 20 2f 2a                /*
a140: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
a150: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
a160: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
a170: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  e       0x000002
a180: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
a190: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
a1a0: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
a1b0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
a1c0: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30  ing    0x0000040
a1d0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
a1e0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
a1f0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
a200: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
a210: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30  ema    0x0000080
a220: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
a230: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
a240: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a250: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
a260: 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a  e 0x00001000  /*
a270: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
a280: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
a290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a2a0: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
a2b0: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
a2c0: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
a2d0: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
a2e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a2f0: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
a300: 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a  ed 0x0004000  /*
a310: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
a320: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
a330: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
a340: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
a350: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
a360: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
a370: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
a380: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
a390: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30  ryMode   0x00010
a3a0: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
a3b0: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
a3c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
a3d0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
a3e0: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76  00020000  /* Rev
a3f0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
a400: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
a410: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
a420: 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30  gers    0x000400
a430: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
a440: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
a450: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a460: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
a470: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
a480: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
a490: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
a4a0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
a4b0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
a4c0: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
a4d0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
a4e0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
a4f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
a500: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
a510: 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  200000  /* Prefe
a520: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
a530: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
a540: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
a550: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30  tension  0x00400
a560: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
a570: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
a580: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a590: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
a5a0: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72  x00800000  /* Tr
a5b0: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
a5c0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
a5d0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
a5e0: 20 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30         0x0100000
a5f0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
a600: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
a610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a620: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
a630: 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44  0x02000000  /* D
a640: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
a650: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
a660: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
a670: 50 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30  P        0x04000
a680: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
a690: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
a6a0: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
a6b0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
a6c0: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
a6d0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
a6e0: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
a6f0: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
a700: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
a710: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
a720: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
a730: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
a740: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
a750: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
a760: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
a770: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
a780: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
a790: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
a7a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
a7b0: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
a7c0: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
a7d0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
a7e0: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
a7f0: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
a800: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
a810: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
a820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
a830: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
a840: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
a850: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
a870: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
a880: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
a890: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
a8a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a8b0: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
a8c0: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
a8d0: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
a8e0: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
a8f0: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
a900: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
a910: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
a920: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
a930: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
a940: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
a950: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
a960: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
a970: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a980: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
a990: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
a9a0: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
a9b0: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
a9c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a9d0: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
a9e0: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
a9f0: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
aa00: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
aa10: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
aa20: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
aa30: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
aa40: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
aa50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
aa60: 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t3          0x08
aa70: 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20  00   /* Use the 
aa80: 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62  SQLITE_STAT3 tab
aa90: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
aaa0: 4c 49 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73  LITE_AdjustOutEs
aab0: 74 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20  t   0x1000   /* 
aac0: 41 64 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73  Adjust output es
aad0: 74 69 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48  timates using WH
aae0: 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ERE */.#define S
aaf0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
ab00: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
ab10: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
ab20: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
ab30: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
ab40: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
ab50: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
ab60: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
ab70: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
ab80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
ab90: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
aba0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
abb0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
abc0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
abd0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
abe0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
abf0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
ac00: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
ac10: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
ac20: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
ac30: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
ac40: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
ac50: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
ac60: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ac70: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ac80: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
ac90: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
aca0: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
acb0: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
acc0: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
acd0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
ace0: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
acf0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
ad00: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
ad10: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
ad20: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
ad30: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
ad40: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
ad50: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
ad60: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
ad70: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
ad80: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
ad90: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
ada0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
adb0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
adc0: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
add0: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
ade0: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
adf0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
ae00: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
ae10: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
ae20: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
ae30: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
ae40: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
ae50: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
ae60: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
ae70: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
ae80: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
ae90: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
aea0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
aeb0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
aec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
aed0: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
aee0: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
aef0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
af00: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
af10: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
af20: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
af30: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
af40: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
af50: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
af60: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
af70: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
af80: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
af90: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
afa0: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
afb0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
afc0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
afd0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
afe0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
aff0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
b000: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
b010: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
b020: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
b030: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
b040: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
b050: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
b060: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
b070: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
b080: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
b090: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
b0a0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
b0b0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
b0c0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
b0d0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
b0e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
b0f0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
b100: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
b110: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
b120: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
b130: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
b140: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
b150: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
b160: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
b170: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
b180: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
b190: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
b1a0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
b1b0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
b1c0: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
b1d0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
b1e0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
b1f0: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
b200: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
b210: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
b220: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
b230: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
b240: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
b250: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
b260: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
b270: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
b280: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
b290: 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a  gate finalizer *
b2a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
b2b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
b2c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
b2d0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44  tion. */.  FuncD
b2e0: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
b2f0: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
b300: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
b310: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
b320: 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  */.  FuncDestruc
b330: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
b340: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
b350: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
b360: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
b370: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
b380: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
b390: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
b3a0: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
b3b0: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
b3c0: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
b3d0: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
b3e0: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
b3f0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
b400: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
b410: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
b420: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
b430: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
b440: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
b450: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
b460: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
b470: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
b480: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
b490: 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20  f is set to .** 
b4a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
b4b0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
b4c0: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
b4d0: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
b4e0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
b4f0: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
b500: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
b510: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
b520: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
b530: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
b540: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
b550: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
b560: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
b570: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
b580: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
b590: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
b5a0: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
b5b0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
b5c0: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
b5d0: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
b5e0: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
b5f0: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
b600: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
b610: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
b620: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
b630: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
b640: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
b650: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
b660: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
b670: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
b680: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
b690: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
b6a0: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
b6b0: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
b6c0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
b6d0: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
b6e0: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
b6f0: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
b700: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
b710: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
b720: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
b730: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
b740: 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72  TYPEOFARG.  Ther
b750: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
b760: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
b770: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
b780: 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66  fy this..*/.#def
b790: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
b7a0: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f  ENCMASK  0x003 /
b7b0: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
b7c0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
b7d0: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
b7e0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
b7f0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f  LIKE     0x004 /
b800: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
b810: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
b820: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
b830: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
b840: 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43  E     0x008 /* C
b850: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
b860: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
b870: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b880: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
b890: 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65   0x010 /* Epheme
b8a0: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
b8b0: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
b8c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
b8d0: 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20  EDCOLL 0x020 /* 
b8e0: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
b8f0: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
b900: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
b910: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
b920: 45 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a  ENGTH   0x040 /*
b930: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
b940: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
b950: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b960: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38  NC_TYPEOF   0x08
b970: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
b980: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
b990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b9a0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
b9b0: 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x100 /* Built-i
b9c0: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
b9d0: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
b9e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
b9f0: 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75  ESCE 0x200 /* Bu
ba00: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
ba10: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
ba40: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
ba50: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
ba60: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ba70: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ba80: 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e  ANT 0x800 /* Con
ba90: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
baa0: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
bab0: 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  put */../*.** Th
bac0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
bad0: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
bae0: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
baf0: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
bb00: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
bb10: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
bb20: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
bb30: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
bb40: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
bb50: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
bb60: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
bb70: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
bb80: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
bb90: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
bba0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
bbb0: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
bbc0: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
bbd0: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
bbe0: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
bbf0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
bc00: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
bc10: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
bc20: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
bc30: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
bc40: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
bc50: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
bc60: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
bc70: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
bc80: 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20  nction. If .**  
bc90: 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
bca0: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
bcb0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
bcc0: 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
bcd0: 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e  et..**.**   VFUN
bce0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
bcf0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
bd00: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
bd10: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
bd20: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
bd30: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
bd40: 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20  NT flag..**.**  
bd50: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
bd60: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
bd70: 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
bd80: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
bd90: 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
bda0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
bdb0: 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
bdc0: 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
bdd0: 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
bde0: 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
bdf0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
be00: 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
be10: 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
be20: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
be30: 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
be40: 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
be50: 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
be60: 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
be70: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
be80: 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
be90: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
bea0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
beb0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
bec0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
bed0: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74  ame .**     that
bee0: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
bef0: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
bf00: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
bf10: 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20  call to C .**   
bf20: 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
bf30: 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
bf40: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
bf50: 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
bf60: 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
bf70: 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
bf80: 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
bf90: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
bfa0: 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
bfb0: 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
bfc0: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
bfd0: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
bfe0: 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
bff0: 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
c000: 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
c010: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
c020: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
c030: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
c040: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c050: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
c060: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
c070: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
c080: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
c090: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
c0a0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
c0b0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56   0, 0}.#define V
c0c0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
c0d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
c0e0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
c0f0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
c100: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
c110: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
c120: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
c130: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
c140: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
c150: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
c160: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
c170: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
c180: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
c190: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51  gs) \.  {nArg,SQ
c1a0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c1b0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
c1c0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
c1d0: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
c1e0: 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45  lags,\.   SQLITE
c1f0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
c200: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
c210: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
c220: 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
c230: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
c240: 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
c250: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
c260: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c270: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c280: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c290: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c2a0: 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
c2b0: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
c2c0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49  0, 0}.#define LI
c2d0: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
c2e0: 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
c2f0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
c300: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
c310: 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
c320: 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
c330: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
c340: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
c350: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
c360: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
c370: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
c380: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
c390: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
c3a0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
c3b0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
c3c0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
c3d0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
c3e0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
c3f0: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
c400: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
c410: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
c420: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
c430: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
c440: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
c450: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
c460: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
c470: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
c480: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
c490: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
c4a0: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
c4b0: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
c4c0: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
c4d0: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
c4e0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
c4f0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
c500: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 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 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
c530: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
c540: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
c550: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
c580: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
c590: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
c5a0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
c5d0: 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
c5e0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
c5f0: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
c600: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
c610: 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
c620: 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
c630: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
c640: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
c650: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
c660: 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
c670: 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
c680: 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
c690: 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
c6a0: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
c6b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
c6c0: 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
c6d0: 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
c6e0: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
c6f0: 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
c700: 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
c710: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
c720: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
c730: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
c740: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
c750: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
c760: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
c770: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
c780: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
c790: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
c7a0: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
c7b0: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
c7c0: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
c7d0: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
c7e0: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
c7f0: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
c800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
c810: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
c820: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
c830: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
c840: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
c850: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
c880: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
c890: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
c8a0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
c8b0: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
c8c0: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
c8d0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
c8e0: 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
c8f0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
c900: 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
c910: 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
c920: 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
c930: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
c940: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
c950: 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
c960: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
c970: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
c980: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
c990: 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
c9a0: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
c9b0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
c9c0: 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *zDflt;     /* 
c9d0: 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
c9e0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
c9f0: 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  ue */.  char *zT
ca00: 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61  ype;     /* Data
ca10: 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63   type for this c
ca20: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
ca30: 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
ca40: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ca50: 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
ca60: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
ca70: 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
ca80: 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
ca90: 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
caa0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
cab0: 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
cac0: 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
cad0: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
cae0: 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
caf0: 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
cb00: 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
cb10: 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63  d size of this c
cb20: 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a  olumn.  INT==1 *
cb30: 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
cb40: 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
cb50: 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
cb60: 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
cb70: 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
cb80: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
cb90: 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
cba0: 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
cbb0: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
cbc0: 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
cbd0: 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
cbe0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
cbf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
cc00: 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
cc10: 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
cc20: 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
cc30: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
cc40: 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74  ./*.** A "Collat
cc50: 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73  ing Sequence" is
cc60: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
cc70: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
cc80: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
cc90: 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61  cture. Conceptua
cca0: 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67  lly, a collating
ccb0: 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73   sequence consis
ccc0: 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64  ts of a name and
ccd0: 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  .** a comparison
cce0: 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65   routine that de
ccf0: 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  fines the order 
cd00: 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65  of that sequence
cd10: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53  ..**.** If CollS
cd20: 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c  eq.xCmp is NULL,
cd30: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
cd40: 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  he.** collating 
cd50: 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65  sequence is unde
cd60: 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20  fined.  Indices 
cd70: 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65  built on an unde
cd80: 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69  fined.** collati
cd90: 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20  ng sequence may 
cda0: 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77  not be read or w
cdb0: 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ritten..*/.struc
cdc0: 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68  t CollSeq {.  ch
cdd0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
cde0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
cdf0: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
ce00: 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63  uence, UTF-8 enc
ce10: 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63  oded */.  u8 enc
ce20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ce30: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
ce40: 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70   handled by xCmp
ce50: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  () */.  void *pU
ce60: 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ser;          /*
ce70: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
ce80: 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69  to xCmp() */.  i
ce90: 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a  nt (*xCmp)(void*
cea0: 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64  ,int, const void
ceb0: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
cec0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78  id*);.  void (*x
ced0: 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a  Del)(void*);  /*
cee0: 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   Destructor for 
cef0: 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  pUser */.};../*.
cf00: 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20  ** A sort order 
cf10: 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53  can be either AS
cf20: 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64  C or DESC..*/.#d
cf30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
cf40: 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20  ASC       0  /* 
cf50: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
cf60: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
cf70: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53  ne SQLITE_SO_DES
cf80: 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72  C      1  /* Sor
cf90: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
cfa0: 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  rder */../*.** C
cfb0: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
cfc0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
cfd0: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
cfe0: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
cff0: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
d000: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
d010: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
d020: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
d030: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
d040: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
d050: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
d060: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
d070: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
d080: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
d090: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
d0a0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
d0b0: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
d0c0: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
d0d0: 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  a'.  That way,.*
d0e0: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
d0f0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
d100: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
d110: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
d120: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
d130: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
d140: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
d150: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
d160: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
d170: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
d180: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
d190: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
d1a0: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
d1b0: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
d1c0: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
d1d0: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n..*/.#define SQ
d1e0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
d1f0: 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51    'a'.#define SQ
d200: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20  LITE_AFF_NONE   
d210: 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51    'b'.#define SQ
d220: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
d230: 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51    'c'.#define SQ
d240: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
d250: 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51    'd'.#define SQ
d260: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
d270: 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73    'e'..#define s
d280: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
d290: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
d2a0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
d2b0: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
d2c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
d2d0: 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
d2e0: 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
d2f0: 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
d300: 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20  affinity value. 
d310: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
d320: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
d330: 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x67../*.** Addi
d340: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
d350: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
d360: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
d370: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
d380: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
d390: 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
d3a0: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
d3b0: 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
d3c0: 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
d3d0: 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
d3e0: 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
d3f0: 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
d400: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
d410: 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
d420: 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
d430: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
d440: 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
d450: 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
d460: 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
d470: 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
d480: 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
d490: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
d4a0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
d4b0: 55 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a  ULL   0x08  /* j
d4c0: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
d4d0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
d4e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d4f0: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
d500: 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
d510: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
d520: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
d530: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d540: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
d550: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
d560: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
d570: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
d580: 20 30 78 38 38 20 20 2f 2a 20 41 73 73 65 72 74   0x88  /* Assert
d590: 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
d5a0: 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
d5b0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
d5c0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
d5d0: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
d5e0: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
d5f0: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
d600: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
d610: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
d620: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
d630: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
d640: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
d650: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
d660: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
d670: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
d680: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
d690: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
d6a0: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
d6b0: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
d6c0: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
d6d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
d6e0: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
d6f0: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
d700: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
d710: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
d720: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
d730: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
d740: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
d750: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
d760: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
d770: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
d780: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
d790: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
d7a0: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
d7b0: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
d7c0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
d7d0: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
d7e0: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
d7f0: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
d800: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
d810: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
d820: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
d830: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
d840: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
d850: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
d860: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
d870: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
d880: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
d890: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
d8a0: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
d8b0: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
d8c0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
d8d0: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
d8e0: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
d8f0: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
d900: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
d910: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
d920: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
d930: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
d940: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
d950: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
d960: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
d970: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
d980: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
d990: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
d9a0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
d9b0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
d9c0: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
d9d0: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
d9e0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
d9f0: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
da00: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
da10: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
da20: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
da30: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
da40: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
da50: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
da60: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
da70: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
da80: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
da90: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
daa0: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
dab0: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
dac0: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
dad0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
dae0: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
daf0: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
db00: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
db10: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
db20: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
db30: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
db40: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
db50: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
db60: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
db70: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
db80: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
db90: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
dba0: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
dbb0: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
dbc0: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
dbd0: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
dbe0: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
dbf0: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
dc00: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
dc10: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
dc20: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
dc30: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
dc40: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
dc50: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
dc60: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
dc70: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
dc80: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
dc90: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
dca0: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
dcb0: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
dcc0: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
dcd0: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
dce0: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
dcf0: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
dd00: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
dd10: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
dd20: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
dd30: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
dd40: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
dd50: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
dd60: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
dd70: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
dd80: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
dd90: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
dda0: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
ddb0: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
ddc0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
ddd0: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
dde0: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
ddf0: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
de00: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
de10: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
de20: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
de30: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
de40: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
de50: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
de60: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
de70: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
de80: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
de90: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
dea0: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
deb0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
dec0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
ded0: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
dee0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
def0: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
df00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
df10: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
df20: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
df30: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
df40: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
df50: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
df60: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
df70: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
df80: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
df90: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
dfa0: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
dfb0: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
dfc0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
dfd0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
dfe0: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
dff0: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
e000: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
e010: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
e020: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e040: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
e050: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
e060: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
e070: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
e080: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
e090: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
e0a0: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
e0b0: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
e0c0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
e0d0: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
e0e0: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
e0f0: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
e100: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
e110: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
e120: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
e130: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
e140: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70  SQL table is rep
e150: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
e160: 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ry by an instanc
e170: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  e of the.** foll
e180: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
e190: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61  .**.** Table.zNa
e1a0: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
e1b0: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f the table.  Th
e1c0: 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72  e case of the or
e1d0: 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45  iginal.** CREATE
e1e0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
e1f0: 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20   is stored, but 
e200: 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  case is not sign
e210: 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63  ificant for.** c
e220: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a  omparisons..**.*
e230: 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20  * Table.nCol is 
e240: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
e250: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
e260: 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c  ble.  Table.aCol
e270: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
e280: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
e290: 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65  Column structure
e2a0: 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  s, one for each 
e2b0: 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  column..**.** If
e2c0: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
e2d0: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
e2e0: 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c  Y KEY, then Tabl
e2f0: 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69  e.iPKey is the i
e300: 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63  ndex of.** the c
e310: 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68  olumn that is th
e320: 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77  at key.   Otherw
e330: 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  ise Table.iPKey 
e340: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
e350: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
e360: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
e370: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
e380: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
e390: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
e3a0: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
e3b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
e3c0: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
e3d0: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
e3e0: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
e3f0: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
e400: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
e410: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
e420: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
e430: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
e440: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
e450: 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61  he table.  TF_Ha
e460: 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73  sPrimaryKey is s
e470: 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62  et if.** the tab
e480: 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41  le has any PRIMA
e490: 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20  RY KEY, INTEGER 
e4a0: 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a  or otherwise..**
e4b0: 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69  .** Table.tnum i
e4c0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
e4d0: 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42  r for the root B
e4e0: 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65  Tree page of the
e4f0: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a   table in the.**
e500: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
e510: 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73   If Table.iDb is
e520: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
e530: 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
e540: 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73   backend.** in s
e550: 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20  qlite.aDb[].  0 
e560: 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20  is for the main 
e570: 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69  database and 1 i
e580: 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74  s for the file t
e590: 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d  hat.** holds tem
e5a0: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
e5b0: 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54  d indices.  If T
e5c0: 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73  F_Ephemeral is s
e5d0: 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74  et.** then the t
e5e0: 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69  able is stored i
e5f0: 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73  n a file that is
e600: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
e610: 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74  eleted.** when t
e620: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74  he VDBE cursor t
e630: 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  o the table is c
e640: 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20  losed.  In this 
e650: 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20  case Table.tnum 
e660: 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20  .** refers VDBE 
e670: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68  cursor number th
e680: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62  at holds the tab
e690: 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20  le open, not to 
e6a0: 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  the root.** page
e6b0: 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69   number.  Transi
e6c0: 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75  ent tables are u
e6d0: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
e6e0: 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20  results of a.** 
e6f0: 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61  sub-query that a
e700: 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f  ppears instead o
e710: 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e  f a real table n
e720: 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ame in the FROM 
e730: 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20  clause .** of a 
e740: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
e750: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
e760: 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
e770: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
e780: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
e790: 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
e7a0: 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
e7b0: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
e7c0: 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
e7d0: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
e7e0: 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
e7f0: 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
e800: 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
e810: 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
e820: 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
e830: 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
e840: 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
e850: 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
e860: 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
e870: 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
e880: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
e890: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
e8a0: 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
e8b0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
e8c0: 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
e8d0: 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
e8e0: 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
e8f0: 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  olumn */.#ifndef
e900: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45   SQLITE_OMIT_CHE
e910: 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  CK.  ExprList *p
e920: 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c  Check;    /* All
e930: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
e940: 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c  ts */.#endif.  L
e950: 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
e960: 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
e970: 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
e980: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
e990: 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  t1 table */.  in
e9a0: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
e9b0: 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
e9c0: 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74   node for this t
e9d0: 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61  able (see note a
e9e0: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69  bove) */.  i16 i
e9f0: 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
ea00: 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
ea10: 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
ea20: 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61  ey] as the prima
ea30: 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20  ry key */.  i16 
ea40: 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
ea50: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
ea60: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
ea70: 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65  ble */.  u16 nRe
ea80: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
ea90: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
eaa0: 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
eab0: 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
eac0: 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
ead0: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
eae0: 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
eaf0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
eb00: 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
eb10: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
eb20: 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
eb30: 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
eb40: 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
eb50: 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
eb60: 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
eb70: 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
eb80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
eb90: 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
eba0: 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
ebb0: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
ebc0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
ebd0: 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
ebe0: 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
ebf0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
ec00: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
ec10: 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
ec20: 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
ec30: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
ec40: 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
ec50: 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
ec60: 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f  eArg;  /* Text o
ec70: 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67  f all module arg
ec80: 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65  s. [0] is module
ec90: 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c   name */.  VTabl
eca0: 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
ecb0: 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
ecc0: 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
ecd0: 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
ece0: 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
ecf0: 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
ed00: 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
ed10: 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
ed20: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
ed30: 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
ed40: 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
ed50: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
ed60: 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
ed70: 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
ed80: 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
ed90: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
eda0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
edb0: 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f  ble.tabFlags..*/
edc0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
edd0: 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31  only        0x01
ede0: 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
edf0: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
ee00: 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
ee10: 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32  meral       0x02
ee20: 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
ee30: 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
ee40: 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
ee50: 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20  ryKey   0x04    
ee60: 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
ee70: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
ee80: 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
ee90: 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20  rement   0x08   
eea0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d   /* Integer prim
eeb0: 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69  ary key is autoi
eec0: 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66  ncrement */.#def
eed0: 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20  ine TF_Virtual  
eee0: 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
eef0: 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74  * Is a virtual t
ef00: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
ef10: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20  TF_WithoutRowid 
ef20: 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f     0x20    /* No
ef30: 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49   rowid used. PRI
ef40: 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
ef50: 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  key */.../*.** T
ef60: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
ef70: 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
ef80: 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
ef90: 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
efa0: 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
efb0: 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
efc0: 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
efd0: 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
efe0: 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
eff0: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
f000: 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
f010: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f020: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
f030: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
f040: 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58  ual(X)      (((X
f050: 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
f060: 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20  _Virtual)!=0).# 
f070: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
f080: 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
f090: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
f0a0: 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
f0b0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
f0c0: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
f0d0: 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
f0e0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
f0f0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65  0.#endif../* Doe
f100: 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
f110: 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
f120: 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
f130: 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
f140: 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
f150: 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
f160: 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
f170: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
f180: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f190: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f1a0: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
f1b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
f1c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
f1d0: 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
f1e0: 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
f1f0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
f200: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
f210: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
f220: 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
f230: 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
f240: 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
f250: 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
f260: 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
f270: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
f280: 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
f290: 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
f2a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
f2b0: 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
f2c0: 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
f2d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
f2e0: 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
f2f0: 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
f300: 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
f310: 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
f320: 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
f330: 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
f340: 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
f350: 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
f360: 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
f370: 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
f380: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
f390: 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
f3a0: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
f3b0: 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
f3c0: 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
f3d0: 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
f3e0: 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
f3f0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f400: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
f410: 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
f420: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
f430: 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
f440: 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
f450: 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
f460: 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
f470: 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
f480: 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
f490: 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
f4a0: 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
f4b0: 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
f4c0: 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
f4d0: 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
f4e0: 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
f4f0: 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
f500: 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
f510: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
f520: 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
f530: 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
f540: 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
f550: 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
f560: 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
f570: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
f580: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
f590: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
f5a0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
f5b0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
f5c0: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
f5d0: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
f5e0: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
f5f0: 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
f600: 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
f610: 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
f620: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
f630: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
f640: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
f650: 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
f660: 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
f670: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
f680: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
f690: 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
f6a0: 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
f6b0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
f6c0: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
f6d0: 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
f6e0: 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
f6f0: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
f700: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f710: 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
f720: 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
f730: 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
f740: 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
f750: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
f760: 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
f770: 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
f780: 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
f790: 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
f7a0: 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
f7b0: 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
f7c0: 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
f7d0: 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
f7e0: 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
f7f0: 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
f800: 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
f810: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
f820: 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
f830: 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
f840: 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
f850: 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
f860: 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
f870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
f880: 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
f890: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
f8a0: 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
f8b0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
f8c0: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
f8d0: 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
f8e0: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
f8f0: 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
f900: 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
f910: 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
f920: 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
f930: 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
f940: 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
f950: 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
f960: 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
f970: 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
f980: 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
f990: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
f9a0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
f9b0: 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
f9c0: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
f9d0: 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
f9e0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
f9f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
fa00: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
fa10: 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
fa20: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
fa30: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
fa40: 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
fa50: 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
fa60: 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
fa70: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
fa80: 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
fa90: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
faa0: 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
fab0: 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
fac0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
fad0: 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
fae0: 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
faf0: 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
fb00: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
fb10: 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
fb20: 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
fb30: 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
fb40: 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
fb50: 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
fb60: 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
fb70: 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
fb80: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
fb90: 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
fba0: 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
fbb0: 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
fbc0: 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
fbd0: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
fbe0: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
fbf0: 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
fc00: 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
fc10: 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
fc20: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
fc30: 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
fc40: 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
fc50: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
fc60: 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
fc70: 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
fc80: 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
fc90: 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
fca0: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
fcb0: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
fcc0: 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
fcd0: 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
fce0: 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
fcf0: 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
fd00: 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
fd10: 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
fd20: 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
fd30: 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
fd40: 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
fd50: 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
fd60: 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
fd70: 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
fd80: 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
fd90: 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
fda0: 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
fdb0: 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
fdc0: 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
fdd0: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
fde0: 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
fdf0: 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
fe00: 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
fe10: 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
fe20: 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
fe30: 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
fe40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
fe50: 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
fe60: 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
fe70: 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
fe80: 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
fe90: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
fea0: 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
feb0: 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
fec0: 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
fed0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
fee0: 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
fef0: 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
ff00: 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
ff10: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
ff20: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
ff30: 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
ff40: 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
ff50: 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
ff60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
ff70: 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
ff80: 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
ff90: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
ffa0: 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
ffb0: 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
ffc0: 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
ffd0: 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
ffe0: 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
fff0: 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
10000 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
10010 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
10020 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
10030 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
10040 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
10050 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
10060 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
10070 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
10080 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
10090 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
100a0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
100b0 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
100c0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
100d0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
100e0 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
100f0 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
10100 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
10110 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
10120 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
10130 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
10140 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
10150 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
10160 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
10170 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
10180 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
10190 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
101a0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
101b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
101c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
101d0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
101e0 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
101f0 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
10200 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
10210 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
10220 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
10230 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
10240 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
10250 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
10260 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
10270 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
10280 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
10290 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
102a0 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
102b0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
102c0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
102d0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
102e0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
102f0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
10300 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
10310 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
10320 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
10330 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
10340 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
10350 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
10360 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
10370 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
10380 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
10390 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
103a0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
103b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
103c0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
103d0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
103e0 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
103f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10400 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
10410 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
10420 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
10430 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
10440 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10450 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
10460 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
10470 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
10480 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
10490 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
104a0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
104b0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
104c0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
104d0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
104e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
104f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10500 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
10510 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a  rmation about a.
10520 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20  ** single index 
10530 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
10540 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72  already been par
10550 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
10560 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65  ividual.** value
10570 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  s..**.** A recor
10580 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
10590 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
105a0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
105b0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
105c0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
105d0 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
105e0 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
105f0 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
10600 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
10610 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
10620 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
10630 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
10640 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
10650 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
10660 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
10670 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
10680 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
10690 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
106a0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f  his structure ho
106b0 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61  lds a record tha
106c0 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
106d0 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a  en disassembled.
106e0 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73  ** into its cons
106f0 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a  tituent fields..
10700 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
10710 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61   r2 member varia
10720 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
10730 65 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69  ed by the optimi
10740 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  zed comparison.*
10750 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65  * functions vdbe
10760 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74  RecordCompareInt
10770 28 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72  () and vdbeRecor
10780 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29  dCompareString()
10790 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
107a0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
107b0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
107c0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
107d0 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
107e0 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
107f0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
10800 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10810 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
10820 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
10830 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
10840 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
10850 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
10860 75 61 6c 20 2a 2f 0a 20 20 75 38 20 69 73 43 6f  ual */.  u8 isCo
10870 72 72 75 70 74 3b 20 20 20 20 20 20 20 2f 2a 20  rrupt;       /* 
10880 43 6f 72 72 75 70 74 69 6f 6e 20 64 65 74 65 63  Corruption detec
10890 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
108a0 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 4d 65 6d  mpare() */.  Mem
108b0 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
108c0 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
108d0 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20  int r1;         
108e0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
108f0 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
10900 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72   rhs) */.  int r
10910 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  2;             /
10920 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
10930 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29  n if (rhs < lhs)
10940 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45   */.};.../*.** E
10950 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
10960 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
10970 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
10980 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10990 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
109a0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
109b0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
109c0 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
109d0 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
109e0 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
109f0 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
10a00 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
10a10 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
10a20 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
10a30 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
10a40 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
10a50 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
10a60 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
10a70 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
10a80 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
10a90 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
10aa0 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
10ab0 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
10ac0 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
10ad0 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
10ae0 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
10af0 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
10b00 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
10b10 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
10b20 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
10b30 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
10b40 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
10b50 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
10b60 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
10b70 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
10b80 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
10b90 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
10ba0 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
10bb0 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20  because the .** 
10bc0 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
10bd0 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
10be0 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
10bf0 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
10c00 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
10c10 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
10c20 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
10c30 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
10c40 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
10c50 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
10c60 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
10c70 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
10c80 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
10c90 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
10ca0 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
10cb0 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
10cc0 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
10cd0 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
10ce0 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
10cf0 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
10d00 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
10d10 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
10d20 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
10d30 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
10d40 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
10d50 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
10d60 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
10d70 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
10d80 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
10d90 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  on .** algorithm
10da0 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
10db0 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
10dc0 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
10dd0 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
10de0 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72   element..*/.str
10df0 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
10e00 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
10e10 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10e20 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
10e30 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
10e40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
10e50 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
10e60 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
10e70 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
10e80 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
10e90 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
10ea0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
10eb0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
10ec0 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
10ed0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
10ee0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
10ef0 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
10f00 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
10f10 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
10f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
10f30 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
10f40 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
10f50 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
10f60 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
10f70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
10f80 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
10f90 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
10fa0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
10fb0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
10fc0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
10fd0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
10fe0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
10ff0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
11000 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
11010 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
11020 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
11030 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
11040 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
11050 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
11060 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
11070 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
11080 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
11090 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
110a0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
110b0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
110c0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
110d0 49 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41  Info;       /* A
110e0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
110f0 73 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69  suitable for thi
11100 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
11110 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
11120 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
11130 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
11140 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
11150 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
11160 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
11170 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
11180 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
11190 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
111a0 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
111b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
111c0 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
111d0 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
111e0 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
111f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11200 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
11210 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
11220 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
11230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
11240 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
11250 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
11260 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
11270 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64  unsigned autoInd
11280 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55  ex:2;    /* 1==U
11290 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
112a0 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
112b0 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
112c0 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
112d0 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
112e0 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
112f0 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
11300 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
11310 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
11320 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
11330 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
11340 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
11350 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
11360 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
11370 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
11380 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
11390 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
113a0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
113b0 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
113c0 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
113d0 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
113e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
113f0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
11400 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
11410 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
11420 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
11430 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
11440 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
11450 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
11460 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
11470 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
11480 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
11490 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
114a0 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
114b0 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
114c0 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
114d0 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
114e0 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
114f0 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
11500 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
11510 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  y */.#endif.};..
11520 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
11530 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
11540 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
11550 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
11560 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  d in memory .** 
11570 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72  using a structur
11580 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20  e of this type. 
11590 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
115a0 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  on at the top of
115b0 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e   the.** analyze.
115c0 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f  c source file fo
115d0 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
115e0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
115f0 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
11600 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20  {.  void *p;    
11610 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
11620 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f   to sampled reco
11630 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  rd */.  int n;  
11640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
11650 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62  e of record in b
11660 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ytes */.  tRowcn
11670 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45  t *anEq;    /* E
11680 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
11690 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
116a0 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
116b0 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
116c0 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73   *anLt;    /* Es
116d0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
116e0 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
116f0 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
11700 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
11710 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45  t *anDLt;   /* E
11720 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
11730 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
11740 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
11750 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
11760 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
11770 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
11780 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
11790 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
117a0 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
117b0 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
117c0 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
117d0 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
117e0 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
117f0 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
11800 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
11810 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
11820 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
11830 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
11840 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
11850 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
11860 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
11870 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
11880 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
11890 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
118a0 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
118b0 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
118c0 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
118d0 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
118e0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
118f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11900 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
11910 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
11920 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
11930 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
11940 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
11950 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
11960 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
11970 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
11980 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
11990 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
119a0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
119b0 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
119c0 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
119d0 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
119e0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
119f0 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
11a00 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
11a10 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
11a20 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
11a30 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
11a40 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
11a50 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
11a60 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
11a70 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
11a80 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
11a90 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
11aa0 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
11ab0 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
11ac0 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
11ad0 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
11ae0 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
11af0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
11b00 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
11b10 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
11b20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
11b30 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
11b40 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
11b50 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
11b60 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
11b70 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
11b80 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
11b90 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
11ba0 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
11bb0 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
11bc0 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
11bd0 0a 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 20 20 2a 2a 20 66 72             ** fr
11bf0 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
11c00 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
11c10 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
11c20 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
11c30 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
11c40 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
11c50 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
11c60 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
11c70 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
11c80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
11c90 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
11ca0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
11cb0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
11cc0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
11cd0 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
11ce0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
11cf0 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
11d00 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
11d10 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
11d20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
11d30 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
11d40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11d50 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
11d60 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
11d70 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
11d80 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
11d90 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
11da0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
11db0 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
11dc0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
11dd0 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
11de0 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
11df0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
11e00 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
11e10 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
11e20 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
11e30 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
11e40 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
11e50 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
11e60 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
11e70 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
11e80 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
11e90 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
11ea0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
11eb0 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
11ed0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
11ee0 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
11ef0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
11f00 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
11f10 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
11f20 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
11f30 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
11f40 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
11f50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
11f60 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
11f70 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
11f80 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
11f90 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
11fa0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
11fb0 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
11fc0 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
11fd0 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
11fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11ff0 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
12000 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
12010 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
12020 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
12030 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12040 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
12050 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
12060 0a 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 20 20 2a 2a 20 41 64             ** Ad
12080 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
12090 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
120a0 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s 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 20 20 2a 2a 20 61 67 67            ** agg
120d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
120e0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
120f0 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
12100 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
12110 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
12120 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12140 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
12150 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
12160 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
12170 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
12180 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
12190 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
121a0 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
121b0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
121c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
121d0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
121e0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
121f0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
12200 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
12210 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
12220 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
12230 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
12240 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
12250 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
12260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12270 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
12280 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
12290 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
122a0 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
122b0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
122c0 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
122d0 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
122e0 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
122f0 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
12300 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
12310 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
12320 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
12330 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
12340 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
12350 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
12360 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
12370 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
12380 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
12390 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
123a0 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
123b0 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
123c0 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
123d0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
123e0 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
123f0 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
12400 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
12410 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
12420 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
12430 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
12440 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
12450 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
12460 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
12470 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
12480 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
12490 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
124a0 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
124b0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
124c0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
124d0 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
124e0 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
124f0 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
12500 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
12510 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
12520 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
12530 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
12540 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
12550 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
12560 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
12570 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
12580 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
12590 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
125a0 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
125b0 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
125c0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
125d0 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
125e0 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
125f0 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
12600 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
12610 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
12620 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
12630 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
12640 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
12650 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
12660 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
12670 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
12680 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
12690 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
126a0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
126b0 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
126c0 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
126d0 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
126e0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
126f0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
12700 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
12710 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
12720 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
12730 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
12740 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
12750 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
12760 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
12770 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
12780 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
12790 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
127a0 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
127b0 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
127c0 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
127d0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
127e0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
127f0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
12800 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
12810 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
12820 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
12830 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
12840 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
12850 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
12860 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
12870 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
12880 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
12890 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
128a0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
128b0 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
128c0 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
128d0 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
128e0 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
128f0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
12900 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
12910 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
12920 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
12930 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
12940 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
12950 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
12960 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
12970 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
12980 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
12990 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
129a0 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
129b0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
129c0 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
129d0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
129e0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
129f0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
12a00 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
12a10 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
12a20 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
12a30 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
12a40 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
12a50 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
12a60 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
12a70 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
12a80 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
12a90 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
12aa0 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
12ab0 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
12ac0 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
12ad0 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
12ae0 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
12af0 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
12b00 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
12b10 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
12b20 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
12b30 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
12b40 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
12b50 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
12b60 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
12b70 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
12b80 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
12b90 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
12ba0 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
12bb0 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
12bc0 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
12bd0 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
12be0 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
12bf0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
12c00 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
12c10 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
12c20 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
12c30 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
12c40 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
12c50 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
12c60 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
12c70 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
12c80 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
12c90 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
12ca0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
12cb0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
12cc0 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
12cd0 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
12ce0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
12cf0 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
12d00 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
12d10 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
12d20 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
12d30 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
12d40 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
12d50 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
12d60 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
12d70 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
12d80 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
12d90 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
12da0 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
12db0 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
12dc0 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
12dd0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
12de0 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
12df0 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
12e00 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
12e10 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
12e20 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
12e30 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
12e40 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
12e50 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
12e60 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
12e70 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
12e80 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
12e90 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
12ea0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
12eb0 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
12ec0 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
12ed0 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
12ee0 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
12ef0 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
12f00 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
12f10 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
12f20 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
12f30 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
12f40 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
12f50 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
12f60 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
12f70 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
12f80 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
12f90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12fa0 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
12fb0 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
12fc0 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
12fd0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
12fe0 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
12ff0 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
13000 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
13010 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
13020 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
13030 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
13040 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
13050 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
13060 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
13070 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
13080 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
13090 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
130a0 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
130b0 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
130c0 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
130d0 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
130e0 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
130f0 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
13100 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
13110 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
13120 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
13130 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
13140 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
13150 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
13160 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
13170 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
13180 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
13190 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
131a0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
131b0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
131c0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
131d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
131e0 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
131f0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
13200 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
13210 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
13220 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
13230 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
13240 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
13250 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
13260 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
13270 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
13280 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
13290 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
132a0 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
132b0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
132c0 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
132d0 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
132e0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
132f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
13300 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
13310 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
13320 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
13330 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
13340 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
13350 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
13360 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
13370 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
13380 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
13390 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
133a0 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
133b0 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
133c0 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
133d0 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
133e0 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
133f0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
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 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
13450 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
13460 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
13470 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
13480 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
13490 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
134a0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
134b0 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
134c0 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20      /* op = IN, 
134d0 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20  EXISTS, SELECT, 
134e0 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20  CASE, FUNCTION, 
134f0 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53  BETWEEN */.    S
13500 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13510 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c      /* EP_xIsSel
13520 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c  ect and op = IN,
13530 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20   EXISTS, SELECT 
13540 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20  */.  } x;..  /* 
13550 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
13560 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  d flag is set in
13570 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
13580 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
13590 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
135a0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
135b0 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
135c0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
135d0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
135e0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
135f0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
13600 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
13610 20 20 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 2a 2a 2f 0a 0a 23 69 66 20 53 51  *******/..#if SQ
13660 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
13670 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69  PTH>0.  int nHei
13680 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ght;           /
13690 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20  * Height of the 
136a0 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74  tree headed by t
136b0 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64  his node */.#end
136c0 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  if.  int iTable;
136d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
136e0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72  K_COLUMN: cursor
136f0 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   number of table
13700 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a   holding 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 20 20 2a 2a 20 54 4b 5f 52           ** TK_R
13730 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65  EGISTER: registe
13740 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20  r number.       
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a    ** TK_TRIGGER:
13770 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20   1 -> new, 0 -> 
13780 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  old.            
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
137a0 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30  EP_Unlikely:  10
137b0 30 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  00 times likelih
137c0 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  ood */.  ynVar i
137d0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
137e0 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
137f0 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
13800 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
13830 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
13840 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
13850 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  ). */.  i16 iAgg
13860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13870 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
13880 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
13890 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
138a0 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
138b0 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
138c0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
138d0 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
138e0 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
138f0 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
13900 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
13910 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
13920 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue 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 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
13950 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
13960 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
13970 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13990 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
139a0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
139b0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
139c0 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
139d0 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
139e0 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
139f0 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
13a00 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
13a10 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
13a20 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
13a30 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a  essions. */.};..
13a40 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
13a50 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
13a60 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
13a70 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
13a80 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
13a90 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
13aa0 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
13ab0 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
13ac0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
13ad0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
13ae0 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
13af0 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e  00002 /* Contain
13b00 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
13b10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13b20 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
13b30 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30  Resolved  0x0000
13b40 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  04 /* IDs have b
13b50 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
13b60 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
13b70 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
13b80 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72  0x000008 /* Expr
13b90 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
13ba0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
13bb0 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
13bc0 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
13bd0 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
13be0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
13bf0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
13c00 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
13c10 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
13c20 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
13c30 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
13c40 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
13c50 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
13c60 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
13c70 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
13c80 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
13c90 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
13ca0 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
13cb0 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
13cc0 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
13cd0 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
13ce0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
13cf0 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
13d00 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
13d10 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  TK_COLLATE opera
13d20 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
13d30 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30  P_Generic   0x00
13d40 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43  0200 /* Ignore C
13d50 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69  OLLATE or affini
13d60 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20  ty on this tree 
13d70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
13d80 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30  tValue  0x000400
13d90 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
13da0 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
13db0 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
13dc0 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
13dd0 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53  0x000800 /* x.pS
13de0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
13df0 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
13e00 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
13e10 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78   EP_Skip      0x
13e20 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54  001000 /* COLLAT
13e30 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45  E, AS, or UNLIKE
13e40 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LY */.#define EP
13e50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32  _Reduced   0x002
13e60 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
13e70 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ct EXPR_REDUCEDS
13e80 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
13e90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
13ea0 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20  enOnly 0x004000 
13eb0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
13ec0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
13ed0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
13ee0 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
13ef0 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a  c    0x008000 /*
13f00 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
13f10 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
13f20 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
13f30 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65  efine EP_MemToke
13f40 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e  n  0x010000 /* N
13f50 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
13f60 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
13f70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
13f80 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30  _NoReduce  0x020
13f90 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  000 /* Cannot EX
13fa0 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
13fb0 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e  s Expr */.#defin
13fc0 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30  e EP_Unlikely  0
13fd0 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
13fe0 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
13ff0 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
14000 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
14010 73 74 61 6e 74 20 20 30 78 30 38 30 30 30 30 20  stant  0x080000 
14020 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e  /* Node is a con
14030 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  stant */../*.** 
14040 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
14050 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
14060 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
14070 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
14080 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
14090 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
140a0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
140b0 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
140c0 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
140d0 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
140e0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
140f0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
14100 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
14110 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
14120 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
14130 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
14140 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
14150 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
14160 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
14170 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
14180 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
14190 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
141a0 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
141b0 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
141c0 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
141d0 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
141e0 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
141f0 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
14200 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
14210 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
14220 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
14230 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
14240 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
14250 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
14260 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
14270 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
14280 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
14290 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
142a0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
142b0 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
142c0 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
142d0 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
142e0 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  r .** struct, an
142f0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
14300 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
14310 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
14320 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20  r.flags .** and 
14330 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
14340 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
14350 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
14360 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
14370 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
14380 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
14390 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
143a0 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
143b0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
143c0 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
143d0 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
143e0 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
143f0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
14400 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
14410 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
14420 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
14430 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
14440 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
14450 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
14460 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
14470 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
14480 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a  header comment .
14490 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
144a0 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
144b0 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
144c0 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
144d0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
144e0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
144f0 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
14500 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
14510 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
14520 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
14530 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
14540 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
14550 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
14560 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
14570 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
14580 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
14590 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
145a0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
145b0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
145c0 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
145d0 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
145e0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
145f0 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
14600 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
14610 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
14620 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
14630 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
14640 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
14650 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
14660 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
14670 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
14680 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
14690 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
146a0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
146b0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
146c0 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
146d0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
146e0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
146f0 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
14700 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
14710 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
14720 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
14730 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
14740 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
14750 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
14760 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
14770 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
14780 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
14790 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
147a0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
147b0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
147c0 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
147d0 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
147e0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
147f0 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
14800 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
14810 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
14820 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
14830 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
14840 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
14850 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
14860 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
14870 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
14880 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
14890 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
148a0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
148b0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
148c0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
148d0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
148e0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
148f0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
14900 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
14910 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
14920 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
14930 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
14940 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
14950 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
14960 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
14970 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
14980 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
14990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
149a0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
149b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
149c0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
149d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
149e0 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
149f0 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
14a00 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
14a10 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
14a20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
14a30 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
14a40 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
14a50 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
14a60 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
14a70 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
14a80 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
14a90 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
14aa0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
14ab0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
14ac0 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
14ad0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
14ae0 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
14af0 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
14b00 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
14b10 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
14b20 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
14b30 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
14b40 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
14b50 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
14b60 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
14b70 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
14b80 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
14b90 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
14ba0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
14bb0 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
14bc0 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
14bd0 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a  /.    } u;.  } *
14be0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
14bf0 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
14c00 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
14c10 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
14c20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
14c30 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14c40 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
14c50 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
14c60 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
14c70 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
14c80 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
14c90 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
14ca0 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
14cb0 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
14cc0 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
14cd0 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
14ce0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
14cf0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
14d00 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
14d10 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
14d20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
14d30 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
14d40 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
14d50 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
14d60 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
14d70 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
14d80 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
14d90 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
14da0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
14db0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
14dc0 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
14dd0 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
14de0 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
14df0 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
14e00 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
14e10 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
14e20 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
14e30 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
14e40 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
14e50 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
14e60 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
14e70 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
14e80 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
14e90 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
14ea0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
14eb0 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
14ec0 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
14ed0 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
14ee0 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
14ef0 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
14f00 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
14f10 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
14f20 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
14f30 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
14f40 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
14f50 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
14f60 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
14f70 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
14f80 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
14f90 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
14fa0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
14fb0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
14fc0 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
14fd0 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
14fe0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
14ff0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
15000 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
15010 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
15020 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
15030 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
15040 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
15050 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
15060 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
15070 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15080 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
15090 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
150a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
150b0 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
150c0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
150d0 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
150e0 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
150f0 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
15100 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
15110 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
15120 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
15130 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
15140 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
15150 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
15160 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
15170 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
15180 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
15190 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
151a0 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65  on ix86..*/.type
151b0 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
151c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
151d0 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
151e0 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
151f0 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
15200 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
15210 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
15220 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
15230 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
15240 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
15250 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
15260 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
15270 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
15280 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
15290 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
152a0 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  (n))../*.** The 
152b0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
152c0 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
152d0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
152e0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
152f0 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
15300 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
15310 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
15320 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
15330 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
15340 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
15350 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
15360 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
15370 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
15380 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
15390 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
153a0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
153b0 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
153c0 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
153d0 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
153e0 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
153f0 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
15400 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
15410 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
15420 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
15430 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
15440 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
15450 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
15460 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
15470 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
15480 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
15490 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
154a0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
154b0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
154c0 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
154d0 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
154e0 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
154f0 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
15500 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
15510 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
15520 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
15530 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
15540 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
15550 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
15560 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
15570 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
15580 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
15590 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
155a0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
155b0 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
155c0 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
155d0 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
155e0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
155f0 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
15600 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
15610 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
15620 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
15630 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
15640 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
15650 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
15660 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
15670 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
15680 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
15690 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
156a0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
156b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
156c0 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
156d0 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
156e0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
156f0 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
15700 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
15710 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
15720 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
15730 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
15740 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
15750 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
15760 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
15770 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
15780 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
15790 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
157a0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
157b0 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
157c0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
157d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
157e0 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
157f0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
15800 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
15810 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
15820 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
15830 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
15840 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
15850 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
15860 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
15870 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
15880 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
15890 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
158a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
158b0 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
158c0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
158d0 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
158e0 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
158f0 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
15900 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
15910 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
15920 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
15930 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
15940 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
15950 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
15960 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
15970 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
15980 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
15990 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
159a0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
159b0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
159c0 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
159d0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
159e0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
159f0 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73  vious */.    uns
15a00 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
15a10 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
15a20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
15a30 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
15a40 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
15a50 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
15a60 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
15a70 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
15a80 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  lated */.    uns
15a90 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
15aa0 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
15ab0 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
15ac0 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e  outine */.    un
15ad0 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
15ae0 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
15af0 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
15b00 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
15b10 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
15b20 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
15b30 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
15b40 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
15b50 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
15b60 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
15b70 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
15b80 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
15b90 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
15ba0 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
15bb0 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
15bc0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
15bd0 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
15be0 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
15bf0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
15c00 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
15c10 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
15c20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
15c30 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
15c40 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
15c50 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
15c60 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
15c70 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
15c80 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  */.    char *zIn
15c90 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e  dex;     /* Iden
15ca0 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
15cb0 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
15cc0 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
15cd0 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
15ce0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
15cf0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
15d00 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66  ng to zIndex, if
15d10 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d   any */.  } a[1]
15d20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15d30 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
15d40 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
15d50 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
15d60 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
15d70 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
15d80 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
15d90 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
15da0 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
15db0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
15dc0 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
15dd0 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
15de0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
15df0 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
15e00 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
15e10 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
15e20 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
15e30 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
15e40 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
15e50 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
15e60 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
15e70 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
15e80 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
15e90 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
15ea0 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
15eb0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
15ec0 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
15ed0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
15ee0 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
15ef0 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
15f00 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
15f10 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
15f20 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
15f30 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
15f40 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
15f50 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
15f60 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
15f70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
15f80 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
15f90 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
15fa0 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
15fb0 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
15fc0 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
15fd0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ..*/.#define WHE
15fe0 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
15ff0 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
16000 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
16010 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
16020 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
16030 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
16040 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
16050 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
16060 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
16070 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
16080 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
16090 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
160a0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
160b0 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
160c0 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
160d0 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
160e0 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
160f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16100 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
16110 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74    0x0008 /* Ok t
16120 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
16130 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
16140 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
16150 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20  MIT_OPEN_CLOSE  
16160 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20  0x0010 /* Table 
16170 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65  cursors are alre
16180 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66  ady open */.#def
16190 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f  ine WHERE_FORCE_
161a0 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32  TABLE      0x002
161b0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20  0 /* Do not use 
161c0 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65  an index-only se
161d0 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arch */.#define 
161e0 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f  WHERE_ONETABLE_O
161f0 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a  NLY    0x0040 /*
16200 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31   Only code the 1
16210 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62  st table in pTab
16220 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  List */.#define 
16230 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20  WHERE_AND_ONLY  
16240 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
16250 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63   Don't use indic
16260 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20  es for OR terms 
16270 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16280 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
16290 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64    0x0100 /* pOrd
162a0 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
162b0 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
162c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
162d0 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32  NCTBY       0x02
162e0 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  00 /* pOrderby i
162f0 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
16300 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
16310 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
16320 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
16330 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  400 /* All outpu
16340 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
16350 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
16360 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
16370 4f 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20  OUP      0x0800 
16380 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
16390 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
163a0 29 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  ) */../* Allowed
163b0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
163c0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
163d0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
163e0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
163f0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
16400 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
16410 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
16420 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16430 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
16440 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
16450 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
16460 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
16470 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
16480 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
16490 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
164a0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
164b0 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
164c0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
164d0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
164e0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
164f0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
16500 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
16510 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
16520 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
16530 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
16540 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
16550 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
16560 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
16570 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
16580 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
16590 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
165a0 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
165b0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
165c0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
165d0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
165e0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
165f0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
16600 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
16610 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
16620 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
16630 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
16640 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
16650 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
16660 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
16670 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
16680 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
16690 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
166a0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
166b0 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
166c0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
166d0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
166e0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
166f0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
16700 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
16710 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
16720 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
16730 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
16740 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
16750 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
16760 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
16770 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
16780 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
16790 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
167a0 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
167b0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
167c0 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
167d0 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
167e0 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
167f0 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
16800 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
16810 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
16820 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
16830 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
16840 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
16850 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
16860 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
16870 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
16880 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
16890 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
168a0 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
168b0 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
168c0 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
168d0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
168e0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
168f0 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
16900 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
16910 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
16920 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
16930 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
16940 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
16950 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
16960 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
16970 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
16980 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
16990 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
169a0 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
169b0 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
169c0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
169d0 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
169e0 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
169f0 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
16a00 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
16a10 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
16a20 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
16a30 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
16a40 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
16a50 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
16a60 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
16a70 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
16a80 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
16a90 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
16aa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16ab0 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
16ac0 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
16ad0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
16ae0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
16af0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
16b00 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
16b10 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
16b20 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c  mes */.  u8 ncFl
16b30 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
16b40 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
16b50 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
16b60 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
16b70 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
16b80 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
16b90 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
16ba0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
16bb0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
16bc0 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67  x01    /* Aggreg
16bd0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
16be0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
16bf0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
16c00 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20 2f  Agg    0x02    /
16c10 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
16c20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16c30 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
16c40 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
16c50 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x04    /* True i
16c60 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
16c70 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
16c80 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
16c90 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
16ca0 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20  0x08    /* True 
16cb0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
16cc0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
16cd0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
16ce0 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
16cf0 31 30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  10    /* True if
16d00 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
16d10 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
16d20 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
16d30 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
16d40 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
16d50 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
16d60 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
16d70 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
16d80 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
16d90 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
16da0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
16db0 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
16dc0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
16dd0 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
16de0 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
16df0 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
16e00 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
16e10 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
16e20 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
16e30 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
16e40 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
16e50 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
16e60 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
16e70 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
16e80 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
16e90 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
16ea0 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
16eb0 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
16ec0 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
16ed0 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
16ee0 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
16ef0 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
16f00 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
16f10 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
16f20 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
16f30 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
16f40 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
16f50 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
16f60 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
16f70 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
16f80 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
16f90 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
16fa0 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
16fb0 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
16fc0 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
16fd0 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
16fe0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
16ff0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
17000 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
17010 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
17020 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
17030 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
17040 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
17050 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
17060 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
17070 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
17080 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
17090 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
170a0 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
170b0 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
170c0 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
170d0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
170e0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
170f0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
17100 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
17110 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
17120 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
17130 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
17140 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
17150 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
17160 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
17170 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
17180 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
17190 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
171a0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
171b0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
171c0 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
171d0 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
171e0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75  TK_EXCEPT */.  u
171f0 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  16 selFlags;    
17200 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
17210 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
17220 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
17230 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
17240 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
17250 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
17260 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
17270 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
17280 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
17290 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
172a0 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
172b0 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
172c0 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
172d0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
172e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
172f0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
17300 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
17310 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
17320 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
17330 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
17340 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
17350 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
17360 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
17370 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
17380 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
17390 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
173a0 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
173b0 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
173c0 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
173d0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
173e0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
173f0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
17400 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
17410 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
17420 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
17430 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
17440 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
17450 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
17460 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
17470 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
17480 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
17490 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
174a0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
174b0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
174c0 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
174d0 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
174e0 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
174f0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
17500 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
17510 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
17520 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
17530 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
17540 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
17550 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
17560 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
17570 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
17580 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
17590 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
175a0 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
175b0 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lag"..*/.#define
175c0 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
175d0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
175e0 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
175f0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
17600 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
17610 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
17620 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
17630 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
17640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
17650 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30  ggregate       0
17660 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69  x0004  /* Contai
17670 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
17680 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
17690 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
176a0 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20  al   0x0008  /* 
176b0 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
176c0 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
176d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
176e0 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30  nded        0x00
176f0 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  10  /* sqlite3Se
17700 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
17710 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
17720 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
17730 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30  eInfo     0x0020
17740 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
17750 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
17760 6d 65 74 61 64 61 74 61 20 2a 2f 0a 20 20 20 20  metadata */.    
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 2f 2a 20 20 20 20 20 30 78 30 30 34 30 20 20 4e  /*     0x0040  N
17790 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69  OT USED */.#defi
177a0 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
177b0 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a        0x0080  /*
177c0 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
177d0 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
177e0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
177f0 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
17800 30 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a  0100  NOT USED *
17810 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
17820 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30  tedFrom      0x0
17830 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  200  /* Part of 
17840 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
17850 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
17860 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
17870 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30  onvert    0x0400
17880 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
17890 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
178a0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
178b0 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
178c0 69 76 65 20 20 20 20 20 20 20 30 78 30 38 30 30  ive       0x0800
178d0 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
178e0 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
178f0 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
17900 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
17910 64 20 20 20 20 20 20 20 20 30 78 31 30 30 30 20  d        0x1000 
17920 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
17930 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
17940 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
17950 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
17960 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
17970 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
17980 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
17990 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
179a0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
179b0 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
179c0 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
179d0 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
179e0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
179f0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
17a00 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
17a10 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
17a20 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20  ry index .**    
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a40 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
17a50 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
17a60 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
17a70 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
17a80 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
17a90 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
17aa0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
17ab0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
17ac0 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
17ad0 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
17ae0 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
17af0 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
17b00 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
17b10 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
17b20 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
17b30 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
17b40 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
17b50 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
17b60 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
17b70 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
17b80 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
17b90 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
17ba0 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
17bb0 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
17be0 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
17bf0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
17c00 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
17c10 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
17c20 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
17c30 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
17c40 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
17c50 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
17c60 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
17c70 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
17c80 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
17c90 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
17ca0 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
17cb0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
17cc0 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
17cd0 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
17ce0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
17cf0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
17d00 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
17d10 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
17d20 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
17d30 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
17d60 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
17d70 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
17d80 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17d90 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
17da0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
17db0 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
17dc0 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
17de0 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
17df0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
17e00 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
17e10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
17e20 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
17e30 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
17e40 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
17e50 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
17e80 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
17e90 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
17ea0 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  rm. .**         
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
17ec0 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
17ed0 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
17ee0 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
17f10 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
17f20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
17f30 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
17f40 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
17f50 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
17f60 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
17f70 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
17f80 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
17f90 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
17fa0 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
17fb0 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
17fc0 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17fe0 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
17ff0 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
18000 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
18030 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
18040 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
18050 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
18060 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
18070 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
18080 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
18090 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
180a0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
180b0 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
180c0 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
180e0 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
180f0 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
18100 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
18110 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18120 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
18130 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
18140 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
18150 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
18180 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
18190 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
181a0 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
181d0 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
181e0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
181f0 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
18200 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
18210 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
18220 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
18230 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
18240 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
18250 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
18260 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
18270 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18280 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
18290 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
182a0 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
182b0 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
182c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
182d0 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
182e0 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
182f0 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
18320 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
18330 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
18340 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
18350 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
18360 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
18370 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
18380 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
18390 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
183a0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
183b0 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
183e0 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
183f0 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
18400 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
18430 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
18440 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
18450 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
18460 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
18470 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
18480 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
18490 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
184b0 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
184c0 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
184d0 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
184e0 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
18500 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
18510 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
18520 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
18530 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
18540 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
18550 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
18580 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
18590 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
185a0 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
185c0 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
185d0 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
185e0 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
185f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
18600 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
18610 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
18620 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
18630 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
18640 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
18650 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
18660 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
18670 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
18680 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
18690 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
186a0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
186b0 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
186c0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
186d0 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
186e0 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
186f0 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
18700 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
18710 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
18720 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
18730 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
18740 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
18750 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
18760 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
18770 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
18780 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
18790 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
187a0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
187b0 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
187c0 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
187d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
187e0 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
187f0 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
18800 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
18810 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
18820 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
18830 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
18840 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
18850 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
18860 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
18870 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
18880 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
18890 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
188a0 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
188b0 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
188c0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
188d0 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
188e0 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
188f0 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
18900 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
18910 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
18920 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
18930 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
18940 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
18950 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
18960 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
18970 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
18980 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
18990 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
189a0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
189b0 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
189c0 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
189d0 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
189e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
189f0 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
18a00 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
18a10 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
18a20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
18a30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
18a40 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
18a50 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
18a60 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
18a70 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
18a80 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
18a90 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
18aa0 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
18ab0 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
18ac0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
18ad0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
18ae0 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
18af0 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
18b00 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
18b10 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
18b20 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
18b30 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
18b40 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
18b50 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
18b60 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
18b70 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
18b80 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
18b90 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
18ba0 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
18bb0 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
18bc0 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
18bd0 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
18be0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
18bf0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
18c00 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
18c10 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
18c20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
18c30 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
18c40 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
18c50 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
18c60 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
18c70 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
18c80 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
18c90 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
18ca0 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
18cb0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
18cc0 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
18cd0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
18ce0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
18cf0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
18d00 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
18d10 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
18d20 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
18d30 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
18d40 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
18d50 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
18d60 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
18d70 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
18d80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
18d90 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
18da0 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
18db0 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
18dc0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
18dd0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
18de0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
18df0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
18e00 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
18e10 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
18e20 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
18e30 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
18e40 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
18e50 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
18e60 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
18e70 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
18e80 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
18e90 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
18ea0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
18eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18ec0 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
18ed0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
18ee0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
18ef0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
18f00 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
18f10 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
18f20 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
18f30 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
18f40 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
18f50 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
18f60 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
18f70 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
18f80 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
18f90 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
18fa0 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
18fb0 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
18fc0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
18fd0 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
18fe0 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
18ff0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
19000 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19010 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
19020 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
19030 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
19040 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
19050 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
19060 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
19070 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
19080 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
19090 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
190a0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
190b0 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
190c0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
190d0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
190e0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
190f0 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
19100 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
19110 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
19120 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
19130 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
19140 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
19150 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
19160 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
19170 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
19180 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
19190 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
191a0 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
191b0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
191c0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
191d0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
191e0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
191f0 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
19200 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
19210 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
19220 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
19230 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
19240 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
19250 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
19260 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
19270 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
19280 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
19290 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
192a0 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
192b0 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
192c0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
192d0 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
192e0 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
192f0 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
19300 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
19310 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
19320 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
19330 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
19340 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
19350 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
19360 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
19370 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
19380 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
19390 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
193a0 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
193b0 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
193c0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
193d0 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
193e0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
193f0 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
19400 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
19410 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
19420 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
19430 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
19440 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
19450 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
19460 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
19470 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
19480 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
19490 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
194a0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
194b0 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
194c0 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
194d0 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
194e0 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
194f0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
19500 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
19510 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
19520 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69  0.  typedef sqli
19530 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61  te3_uint64 yDbMa
19540 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
19550 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
19560 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66   yDbMask;.#endif
19570 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
19580 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
19590 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
195a0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
195b0 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
195c0 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
195d0 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
195e0 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
195f0 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
19600 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
19610 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
19620 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
19630 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
19640 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
19650 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
19660 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
19670 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
19680 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
19690 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
196a0 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
196b0 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
196c0 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
196d0 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
196e0 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
196f0 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
19700 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
19710 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
19720 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
19730 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
19740 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
19750 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
19760 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
19770 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a   shared-cache .*
19780 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
19790 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
197a0 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
197b0 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
197c0 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
197d0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
197e0 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
197f0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
19800 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
19810 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
19820 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
19830 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
19840 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
19850 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
19860 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
19870 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19880 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19890 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
198a0 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
198b0 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
198c0 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
198d0 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
198e0 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
198f0 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
19900 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
19910 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
19920 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
19930 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
19940 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
19950 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
19960 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
19970 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
19980 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
19990 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
199a0 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
199b0 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
199c0 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
199d0 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
199e0 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
199f0 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
19a00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19a10 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
19a20 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
19a30 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
19a40 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
19a50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19a60 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
19a70 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
19a80 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
19a90 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
19aa0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
19ab0 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
19ac0 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
19ad0 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
19ae0 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
19af0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
19b00 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
19b10 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
19b20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
19b30 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
19b40 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
19b50 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
19b60 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
19b70 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
19b80 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
19b90 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
19ba0 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61  tants */.  int a
19bb0 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
19bc0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
19bd0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
19be0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  gisters */.  int
19bf0 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   nRangeReg;     
19c00 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
19c10 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
19c20 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
19c30 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20  nt iRangeReg;   
19c40 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
19c50 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61  ister in tempora
19c60 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
19c70 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  k */.  int nErr;
19c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19c90 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
19ca0 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  seen */.  int nT
19cb0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
19cc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76  * Number of prev
19cd0 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
19ce0 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f   VDBE cursors */
19cf0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
19d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19d10 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
19d20 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
19d30 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20  .  int nSet;    
19d40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19d50 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73  r of sets used s
19d60 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
19d70 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  Once;           
19d80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f  /* Number of OP_
19d90 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  Once instruction
19da0 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  s so far */.  in
19db0 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20  t nOpAlloc;     
19dc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19dd0 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
19de0 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
19df0 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70  /.  int iFixedOp
19e00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65  ;        /* Neve
19e10 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64  r back out opcod
19e20 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72  es iFixedOp-1 or
19e30 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e   earlier */.  in
19e40 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
19e50 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
19e60 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
19e70 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
19e80 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50  ints */.  int iP
19e90 61 72 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f  artIdxTab;     /
19ea0 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  * Table correspo
19eb0 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69  nding to a parti
19ec0 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  al index */.  in
19ed0 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20  t iCacheLevel;  
19ee0 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76     /* ColCache v
19ef0 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61  alid when aColCa
19f00 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43  che[].iLevel<=iC
19f10 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69  acheLevel */.  i
19f20 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20  nt iCacheCnt;   
19f30 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75      /* Counter u
19f40 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
19f50 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20  aColCache[].lru 
19f60 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
19f70 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
19f80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61   /* Number of la
19f90 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
19fa0 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
19fb0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
19fc0 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
19fd0 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  */.  struct yCol
19fe0 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
19ff0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
1a000 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
1a010 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
1a020 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  i16 iColumn;    
1a030 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1a040 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
1a050 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
1a060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
1a070 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
1a080 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
1a090 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
1a0a0 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
1a0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
1a0c0 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
1a0d0 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
1a0e0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
1a0f0 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
1a100 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
1a110 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
1a120 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
1a130 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
1a140 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
1a150 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
1a160 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
1a170 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
1a180 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
1a190 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
1a1a0 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
1a1b0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1a1c0 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f  pConstExpr;/* Co
1a1d0 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
1a1e0 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  ns */.  Token co
1a1f0 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
1a200 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
1a210 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
1a220 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
1a230 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
1a240 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
1a250 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
1a260 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
1a270 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
1a280 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
1a290 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
1a2a0 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
1a2b0 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
1a2c0 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53  nt cookieValue[S
1a2d0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a2e0 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65  ED+2];  /* Value
1a2f0 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20  s of cookies to 
1a300 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20  verify */.  int 
1a310 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
1a320 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1a330 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
1a340 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
1a350 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
1a360 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
1a370 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1a380 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
1a390 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
1a3a0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
1a3b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
1a3c0 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
1a3d0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
1a3e0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
1a3f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a400 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
1a410 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
1a420 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
1a430 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
1a440 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
1a450 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
1a460 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
1a470 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
1a480 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
1a490 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
1a4a0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
1a4b0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
1a4c0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
1a4d0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
1a4e0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
1a4f0 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
1a500 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
1a510 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
1a520 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
1a530 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
1a540 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
1a550 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
1a560 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
1a570 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
1a580 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
1a590 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
1a5a0 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
1a5b0 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
1a5c0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
1a5d0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1a5e0 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
1a5f0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b   */.  int addrSk
1a600 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64  ipPK;      /* Ad
1a610 64 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63  dress of instruc
1a620 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49  tion to skip PRI
1a630 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
1a640 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1a650 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1a660 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1a670 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1a680 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1a690 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1a6a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1a6b0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1a6c0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1a6d0 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1a6e0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1a6f0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1a700 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1a710 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1a720 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1a730 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1a740 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1a750 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1a760 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1a770 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1a780 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1a790 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1a7a0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1a7b0 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1a7c0 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
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 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
1a820 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
1a830 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
1a840 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
1a850 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
1a860 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
1a870 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
1a880 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
1a890 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
1a8a0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
1a8b0 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
1a8c0 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73  of(Parse,nVar) s
1a8d0 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64  o the nVar field
1a8e0 20 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72   must be the fir
1a8f0 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e  st field.  ** in
1a900 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1a910 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
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 2a  ****************
1a960 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
1a990 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
1a9a0 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
1a9b0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
1a9c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a9d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
1a9e0 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
1a9f0 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
1aa00 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1aa10 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1aa20 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1aa30 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1aa40 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68  /.  u8 bFreeWith
1aa50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1aa60 20 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73   True if pWith s
1aa70 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77  hould be freed w
1aa80 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  ith parser */.  
1aa90 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1aaa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1aab0 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1aac0 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1aad0 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1aae0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1aaf0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1ab00 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1ab10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1ab20 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1ab30 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1ab40 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1ab50 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1ab60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ab70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1ab80 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1ab90 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1abb0 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1abc0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1abd0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1abe0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1abf0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1ac00 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1ac10 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1ac20 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1ac30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1ac40 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1ac50 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1ac60 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1ac70 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1ac80 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1ac90 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1aca0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1acb0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1acc0 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1acd0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1ace0 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1acf0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1ad00 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1ad10 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1ad20 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1ad30 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1ad40 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1ad50 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1ad60 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1ad70 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1ad80 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1ad90 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1ada0 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1adb0 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1adc0 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1add0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1ade0 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1adf0 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1ae00 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1ae10 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1ae20 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1ae30 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1ae40 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1ae50 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1ae60 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1ae70 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1ae80 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1ae90 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1aea0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1aeb0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1aec0 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1aed0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1aee0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1aef0 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1af00 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1af10 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1af20 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1af30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1af40 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1af50 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1af60 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1af70 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1af80 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1af90 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1afa0 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1afb0 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1afc0 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1afd0 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1afe0 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1aff0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1b000 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1b010 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1b020 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1b030 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1b040 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1b050 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1b060 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1b070 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b090 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1b0a0 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1b0b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1b0c0 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1b0d0 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1b0e0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1b0f0 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1b100 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b110 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1b120 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1b130 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1b140 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1b150 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1b160 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1b170 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1b180 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1b190 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b1a0 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1b1b0 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1b1c0 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1b1d0 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1b1e0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1b1f0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1b200 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1b210 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1b220 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1b230 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1b240 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1b250 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1b260 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1b270 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b290 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1b2a0 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1b2b0 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1b2c0 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1b2d0 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1b2e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
1b2f0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1b300 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74    0x01    /* Set
1b310 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
1b320 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e  Change */.#defin
1b330 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1b340 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f  ID     0x02    /
1b350 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1b360 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
1b370 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1b380 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
1b390 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
1b3a0 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
1b3b0 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
1b3c0 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
1b3d0 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
1b3e0 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
1b3f0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
1b400 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
1b410 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1b420 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
1b430 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
1b440 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
1b450 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1b460 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
1b470 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c     0x20    /* Cl
1b480 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  ear pseudo-table
1b490 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c   cache in OP_Col
1b4a0 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  umn */.#define O
1b4b0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
1b4c0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
1b4d0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1b4e0 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
1b4f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1b500 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
1b510 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
1b520 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1b530 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
1b540 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
1b550 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
1b560 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
1b570 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
1b580 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
1b590 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
1b5a0 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20  REG       0x02  
1b5b0 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
1b5c0 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
1b5d0 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
1b5e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
1b5f0 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
1b600 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
1b610 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
1b620 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  tion */../*. * E
1b630 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
1b640 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
1b650 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
1b660 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
1b670 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
1b680 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a   Trigger. . *. *
1b690 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
1b6a0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1b6b0 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
1b6c0 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
1b6d0 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
1b6e0 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
1b6f0 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
1b700 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
1b710 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20  epresents the . 
1b720 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
1b730 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
1b740 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
1b750 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
1b760 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
1b770 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
1b780 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
1b790 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
1b7a0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
1b7b0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
1b7c0 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
1b7d0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
1b7e0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
1b7f0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1b800 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
1b810 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
1b820 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
1b830 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1b840 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
1b850 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
1b860 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
1b870 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
1b880 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1b890 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
1b8a0 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
1b8b0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
1b8c0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
1b8d0 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
1b8e0 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
1b8f0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
1b900 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
1b910 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1b920 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
1b930 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1b950 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
1b960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1b970 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
1b980 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
1b990 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
1b9a0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1b9b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1b9c0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1b9d0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1b9e0 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
1b9f0 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
1ba00 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1ba10 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
1ba20 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
1ba30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
1ba40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ba50 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
1ba60 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1ba70 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
1ba80 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
1ba90 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
1baa0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
1bab0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
1bac0 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> 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 20 20 74 68 65 20              the 
1baf0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
1bb00 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1bb10 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1bb20 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
1bb30 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1bb40 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
1bb50 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
1bb60 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
1bb70 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1bb80 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
1bb90 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
1bba0 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
1bbb0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
1bbc0 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
1bbd0 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
1bbe0 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
1bbf0 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
1bc00 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
1bc10 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
1bc20 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
1bc30 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
1bc40 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
1bc50 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
1bc60 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
1bc70 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
1bc80 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
1bc90 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
1bca0 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
1bcb0 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
1bcc0 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
1bcd0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
1bce0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
1bcf0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
1bd00 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
1bd10 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
1bd20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
1bd30 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
1bd40 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
1bd50 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
1bd60 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1bd70 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
1bd80 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
1bd90 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
1bda0 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
1bdb0 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
1bdc0 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
1bdd0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1bde0 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
1bdf0 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
1be00 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
1be10 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
1be20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
1be30 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
1be40 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
1be50 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1be60 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
1be70 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
1be80 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
1be90 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1bea0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
1beb0 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
1bec0 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
1bed0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
1bee0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
1bef0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
1bf00 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
1bf10 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
1bf20 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
1bf30 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
1bf40 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
1bf50 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
1bf60 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
1bf70 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
1bf80 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
1bf90 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
1bfa0 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
1bfb0 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
1bfc0 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
1bfd0 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1bfe0 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
1bff0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1c000 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1c010 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
1c020 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1c030 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1c040 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
1c050 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
1c060 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
1c070 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72  ise NULL.. * tar
1c080 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1c090 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1c0a0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1c0b0 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
1c0c0 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
1c0d0 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
1c0e0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1c0f0 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
1c100 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1c110 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1c120 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
1c130 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
1c140 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
1c150 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
1c160 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1c170 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1c180 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
1c190 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1c1b0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
1c1c0 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
1c1d0 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
1c1e0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1c1f0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
1c200 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1c210 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65  DELETE). * targe
1c220 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1c230 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1c240 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1c250 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1c260 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1c270 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1c280 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1c290 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1c2a0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1c2b0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1c2c0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1c2d0 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1c2e0 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74   TK_UPDATE). * t
1c2f0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1c300 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1c310 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1c320 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1c330 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70  te rows of.. * p
1c340 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1c350 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1c360 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1c370 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1c380 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1c390 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1c3a0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
1c3b0 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
1c3c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
1c3d0 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
1c3e0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
1c3f0 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
1c400 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
1c410 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
1c420 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
1c430 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
1c440 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1c450 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20   argument.. * . 
1c460 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1c470 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
1c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c490 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1c4a0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1c4b0 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
1c4c0 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
1c4d0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
1c4e0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
1c4f0 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
1c500 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
1c510 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
1c520 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
1c530 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
1c540 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1c550 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d   /* SELECT statm
1c560 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
1c570 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c  SERT INTO .. SEL
1c580 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b  ECT ... */.  Tok
1c590 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20  en target;      
1c5a0 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
1c5b0 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
1c5c0 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
1c5d0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1c5e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1c5f0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
1c600 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1c610 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
1c620 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
1c630 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
1c640 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49  r UPDATE. */.  I
1c650 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
1c660 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
1c670 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
1c680 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1c690 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1c6a0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
1c6b0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
1c6c0 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
1c6d0 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
1c6e0 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
1c6f0 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
1c700 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
1c710 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1c720 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1c730 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
1c740 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
1c750 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
1c760 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
1c770 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
1c780 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
1c790 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
1c7a0 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
1c7b0 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
1c7c0 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
1c7d0 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
1c7e0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1c7f0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
1c800 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
1c810 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
1c820 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
1c830 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
1c840 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
1c850 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
1c860 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
1c870 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
1c880 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
1c890 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
1c8a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
1c8b0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
1c8c0 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
1c8d0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
1c8e0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
1c8f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
1c900 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
1c910 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1c920 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1c930 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
1c940 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
1c950 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1c960 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1c970 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1c980 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
1c990 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
1c9a0 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
1c9b0 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
1c9c0 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
1c9d0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
1c9e0 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
1c9f0 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
1ca00 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
1ca10 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
1ca20 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
1ca30 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
1ca40 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
1ca50 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
1ca60 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
1ca70 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
1ca80 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
1ca90 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
1caa0 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
1cab0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1cac0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1cad0 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1cae0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1caf0 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1cb00 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1cb10 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1cb20 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1cb30 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1cb40 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1cb50 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1cb60 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1cb70 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1cb80 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74  ximum allowed st
1cb90 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1cba0 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1cbb0 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1cbc0 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1cbd0 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1cbe0 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1cbf0 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1cc00 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1cc10 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1cc20 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1cc30 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1cc40 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1cc50 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1cc60 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1cc70 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1cc80 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1cc90 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1cca0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1ccb0 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1ccc0 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1ccd0 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1cce0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1ccf0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1cd00 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1cd10 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1cd20 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1cd30 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1cd40 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1cd50 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1cd60 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1cd70 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1cd80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1cd90 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1cda0 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1cdb0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1cdc0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1cdd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1cde0 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1cdf0 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1ce00 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1ce10 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1ce20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1ce30 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1ce40 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1ce50 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1ce60 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1ce70 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1ce80 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1ce90 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1cea0 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1ceb0 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1cec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ced0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1cee0 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1cef0 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1cf20 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1cf30 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1cf40 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1cf50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1cf60 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1cf70 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1cf80 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1cfb0 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1cfc0 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1cfd0 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cff0 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1d000 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1d010 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1d020 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1d030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1d040 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1d050 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
1d060 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
1d070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1d080 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
1d090 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
1d0a0 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1d0b0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1d0c0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1d0d0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1d0e0 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1d0f0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d110 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1d120 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1d130 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1d140 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1d150 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1d160 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1d170 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1d180 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1d190 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1d1a0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1d1b0 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1d1c0 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1d1d0 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1d1e0 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1d1f0 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1d200 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1d210 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1d240 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1d250 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1d280 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1d290 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1d2a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1d2b0 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1d2c0 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1d2d0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1d2e0 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1d2f0 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1d300 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1d310 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1d320 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1d330 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1d340 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1d350 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1d360 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1d370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1d380 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1d390 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1d3a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d3b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1d3c0 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1d3d0 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1d3e0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1d3f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d400 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1d410 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1d420 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d440 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1d450 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1d460 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1d470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1d480 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1d490 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1d4a0 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1d4d0 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1d4e0 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1d4f0 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1d500 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1d510 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1d520 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1d530 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1d540 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1d550 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1d560 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1d570 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20  enabled */.  /* 
1d580 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1d590 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1d5a0 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1d5b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1d5c0 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1d5d0 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1d5e0 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1d5f0 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1d620 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1d630 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1d640 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1d670 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1d680 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1d690 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1d6a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d6b0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1d6c0 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1d6d0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1d6e0 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1d710 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1d720 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1d730 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1d740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d750 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1d760 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1d770 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1d780 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
1d790 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
1d7a0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
1d7b0 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
1d7c0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1d7d0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1d7e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d7f0 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1d800 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tex */.  void (*
1d810 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1d820 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1d830 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1d840 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1d850 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1d880 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20  t to xLog() */. 
1d890 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1d8a0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1d8b0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1d8c0 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1d8d0 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  alls */.#ifdef S
1d8e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1d8f0 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1d900 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1d910 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d920 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1d930 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1d940 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1d950 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
1d960 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
1d970 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
1d980 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
1d990 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
1d9a0 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
1d9b0 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
1d9c0 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
1d9d0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1d9e0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
1d9f0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
1da00 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
1da10 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
1da20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
1da30 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
1da40 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
1da50 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
1da80 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
1da90 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ndif.};../*.** T
1daa0 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
1dab0 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
1dac0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1dad0 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
1dae0 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
1daf0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
1db00 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
1db10 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
1db20 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
1db30 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
1db40 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
1db50 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1db60 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
1db70 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
1db80 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
1db90 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
1dba0 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
1dbb0 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
1dbc0 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
1dbd0 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
1dbe0 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
1dbf0 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
1dc00 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
1dc10 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
1dc20 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
1dc30 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
1dc40 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
1dc50 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
1dc60 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
1dc70 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
1dc80 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
1dc90 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
1dca0 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
1dcb0 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
1dcc0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
1dcd0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
1dce0 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
1dcf0 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
1dd00 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
1dd10 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
1dd20 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
1dd30 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
1dd40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
1dd50 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
1dd60 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
1dd70 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
1dd80 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1dd90 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1dda0 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
1ddb0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1ddc0 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
1ddd0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1dde0 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
1ddf0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
1de00 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1de10 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
1de20 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
1de30 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  s */.  Parse *pP
1de40 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de60 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
1de70 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61  xt.  */.  int wa
1de80 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1deb0 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
1dec0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1def0 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
1df00 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
1df10 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
1df40 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
1df50 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1df80 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a  nteger value */.
1df90 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1dfa0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dfc0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1dfd0 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1dfe0 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e000 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1e010 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1e020 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1e030 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1e040 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1e050 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1e060 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1e070 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1e080 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1e090 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1e0a0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1e0b0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1e0c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1e0d0 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1e0e0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1e0f0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1e100 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1e110 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1e120 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1e130 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1e140 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1e150 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1e160 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1e170 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1e180 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1e190 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1e1a0 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1e1b0 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1e1c0 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1e1d0 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1e1e0 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1e1f0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1e200 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1e210 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1e220 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1e230 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
1e240 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1e250 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
1e260 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
1e270 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
1e280 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
1e290 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
1e2a0 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
1e2b0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
1e2c0 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
1e2d0 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
1e300 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
1e310 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
1e320 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
1e330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1e340 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
1e350 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1e360 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
1e390 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
1e3a0 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
1e3b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
1e3e0 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
1e3f0 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
1e400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1e410 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
1e420 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
1e430 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
1e440 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e460 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
1e470 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
1e480 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1e490 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
1e4a0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1e4b0 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
1e4c0 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1e4d0 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  } a[1];.};../*.*
1e4e0 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
1e4f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
1e500 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
1e510 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
1e520 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
1e530 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
1e540 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
1e550 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
1e560 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
1e570 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
1e580 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1e5a0 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
1e5b0 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
1e5e0 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
1e5f0 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
1e600 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
1e610 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
1e650 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
1e660 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
1e670 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
1e680 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
1e690 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
1e6a0 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
1e6b0 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
1e6c0 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
1e6d0 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
1e6e0 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
1e6f0 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
1e700 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
1e710 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
1e720 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
1e730 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
1e740 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
1e750 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
1e760 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
1e770 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
1e780 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
1e790 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1e7a0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
1e7b0 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
1e7c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e7d0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
1e7e0 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
1e7f0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1e800 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
1e810 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1e820 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
1e830 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
1e840 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
1e850 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1e860 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
1e870 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
1e880 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
1e890 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  _).../*.** FTS4 
1e8a0 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
1e8b0 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
1e8c0 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
1e8d0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
1e8e0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
1e8f0 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
1e900 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
1e910 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68  e also all.** th
1e920 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1e930 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
1e940 72 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65  rve as an alisse
1e950 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
1e960 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
1e970 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1e980 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
1e990 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1e9a0 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
1e9b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
1e9c0 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a  LE_FTS3.#endif..
1e9d0 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
1e9e0 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
1e9f0 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
1ea00 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
1ea10 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
1ea20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
1ea30 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
1ea40 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
1ea50 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
1ea60 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
1ea70 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
1ea80 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1ea90 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
1eaa0 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
1eab0 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
1eac0 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
1ead0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1eae0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
1eaf0 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
1eb00 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
1eb10 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
1eb20 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
1eb30 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
1eb40 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
1eb50 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
1eb60 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
1eb70 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
1eb80 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
1eb90 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
1eba0 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
1ebb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
1ebc0 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
1ebd0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1ebe0 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
1ebf0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1ec00 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
1ec10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ec20 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
1ec30 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1ec40 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1ec50 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
1ec60 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1ec70 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
1ec80 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1ec90 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
1eca0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ecb0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
1ecc0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1ecd0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1ece0 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
1ecf0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
1ed00 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
1ed10 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1ed20 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
1ed30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ed40 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
1ed50 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1ed60 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1ed70 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
1ed80 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
1ed90 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
1eda0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
1edb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
1edc0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1edd0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
1ede0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
1edf0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1ee00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ee10 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
1ee20 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
1ee30 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1ee40 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1ee50 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
1ee60 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1ee70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ee80 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
1ee90 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
1eea0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1eeb0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1eec0 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
1eed0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1eee0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1eef0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
1ef00 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
1ef10 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1ef20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1ef30 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
1ef40 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1ef50 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  r)(x)).#endif../
1ef60 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
1ef70 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
1ef80 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c  s.*/.#define sql
1ef90 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69  ite3StrICmp sqli
1efa0 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20  te3_stricmp.int 
1efb0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
1efc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
1efd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
1efe0 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
1eff0 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
1f000 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
1f010 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1f020 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
1f030 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
1f040 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1f050 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
1f060 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  ero(int);.void *
1f070 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1f080 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ero(sqlite3*, in
1f090 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1f0a0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
1f0b0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  ite3*, int);.cha
1f0c0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
1f0d0 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
1f0e0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
1f0f0 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
1f100 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1f110 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  char*, int);.voi
1f120 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
1f130 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76  c(void*, int);.v
1f140 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
1f150 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
1f160 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
1f170 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1f180 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
1f190 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
1f1a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f1b0 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
1f1c0 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
1f1d0 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
1f1e0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
1f1f0 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
1f200 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1f210 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53  ;.void *sqlite3S
1f220 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74  cratchMalloc(int
1f230 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1f240 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a  cratchFree(void*
1f250 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1f260 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
1f270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
1f280 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
1f290 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
1f2a0 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76  Default(void);.v
1f2b0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
1f2c0 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
1f2d0 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
1f2e0 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e  d (*)(void));.in
1f2f0 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
1f300 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
1f310 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
1f320 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
1f330 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
1f340 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
1f350 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
1f360 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
1f370 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
1f380 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
1f390 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
1f3a0 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
1f3b0 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
1f3c0 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
1f3d0 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
1f3e0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
1f3f0 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
1f400 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
1f410 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
1f420 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1f430 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
1f440 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
1f450 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1f460 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
1f470 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1f480 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1f490 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
1f4a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1f4b0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
1f4c0 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
1f4d0 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
1f4e0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
1f4f0 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23  ee(D,P)       .#
1f500 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1f510 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
1f520 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
1f530 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
1f540 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f550 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
1f560 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
1f570 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
1f580 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f590 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
1f5a0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1f5b0 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
1f5c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1f5d0 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
1f5e0 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
1f5f0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
1f600 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
1f610 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
1f620 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1f630 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
1f640 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1f650 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1f660 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
1f670 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
1f680 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
1f690 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
1f6a0 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
1f6b0 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
1f6c0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
1f6d0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1f6e0 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
1f6f0 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
1f700 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
1f710 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
1f720 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
1f730 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
1f740 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
1f750 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
1f760 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  void);.#endif..i
1f770 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  nt sqlite3Status
1f780 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
1f790 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64   sqlite3StatusAd
1f7a0 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  d(int, int);.voi
1f7b0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53  d sqlite3StatusS
1f7c0 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  et(int, int);..#
1f7d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f7e0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
1f7f0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
1f800 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
1f810 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1f820 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
1f830 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1f840 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1f850 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1f860 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
1f870 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
1f880 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
1f890 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
1f8a0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
1f8b0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
1f8c0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
1f8d0 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
1f8e0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
1f8f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f900 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
1f910 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1f920 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
1f930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f940 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
1f950 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1f960 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
1f970 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
1f980 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
1f990 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ues */.};..#defi
1f9a0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
1f9b0 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23  _INTERNAL 0x01.#
1f9c0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
1f9d0 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
1f9e0 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  02.void sqlite3V
1f9f0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1fa00 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
1fa10 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
1fa20 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
1fa30 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
1fa40 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
1fa50 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
1fa60 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
1fa70 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1fa80 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
1fa90 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
1faa0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1fab0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61  *, va_list);.cha
1fac0 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e  r *sqlite3MAppen
1fad0 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72  df(sqlite3*,char
1fae0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  *,const char*,..
1faf0 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .);.#if defined(
1fb00 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
1fb10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1fb20 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
1fb30 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
1fb40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1fb50 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
1fb60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1fb70 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
1fb80 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
1fb90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
1fba0 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20  ndif../* Output 
1fbb0 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53  formatting for S
1fbc0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45  QLITE_TESTCTRL_E
1fbd0 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65  XPLAIN */.#if de
1fbe0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1fbf0 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e  BLE_TREE_EXPLAIN
1fc00 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1fc10 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62  ExplainBegin(Vdb
1fc20 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1fc30 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66  te3ExplainPrintf
1fc40 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
1fc50 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69  ar*, ...);.  voi
1fc60 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1fc70 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  NL(Vdbe*);.  voi
1fc80 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1fc90 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  Push(Vdbe*);.  v
1fca0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1fcb0 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20  inPop(Vdbe*);.  
1fcc0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1fcd0 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29  ainFinish(Vdbe*)
1fce0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1fcf0 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64  ExplainSelect(Vd
1fd00 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20  be*, Select*);. 
1fd10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1fd20 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20  lainExpr(Vdbe*, 
1fd30 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
1fd40 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1fd50 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70  rList(Vdbe*, Exp
1fd60 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74  rList*);.  const
1fd70 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64   char *sqlite3Vd
1fd80 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64  beExplanation(Vd
1fd90 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  be*);.#else.# de
1fda0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1fdb0 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65  ainBegin(X).# de
1fdc0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1fdd0 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23  ainSelect(A,B).#
1fde0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
1fdf0 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a  xplainExpr(A,B).
1fe00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fe10 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28  ExplainExprList(
1fe20 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1fe30 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69  lite3ExplainFini
1fe40 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  sh(X).# define s
1fe50 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1fe60 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69  ation(X) 0.#endi
1fe70 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
1fe80 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
1fe90 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
1fea0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1feb0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
1fec0 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
1fed0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1fee0 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
1fef0 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
1ff00 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
1ff10 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
1ff20 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
1ff30 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
1ff40 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
1ff50 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
1ff60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
1ff70 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
1ff80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
1ff90 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
1ffa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1ffb0 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
1ffc0 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
1ffd0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
1ffe0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
1fff0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
20000 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
20010 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
20020 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
20030 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
20040 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
20050 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
20060 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
20070 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
20080 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
20090 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
200a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
200b0 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
200c0 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
200d0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
200e0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
200f0 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
20100 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
20110 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
20120 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
20130 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
20140 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
20150 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20160 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
20170 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
20180 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20190 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
201a0 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
201b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
201c0 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
201d0 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
201e0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
201f0 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
20200 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
20210 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
20220 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
20230 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
20240 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
20250 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
20260 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
20270 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
20280 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
20290 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
202a0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
202b0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
202c0 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
202d0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
202e0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
202f0 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
20300 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
20310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
20320 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
20330 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
20340 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
20350 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
20360 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
20370 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
20380 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
20390 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
203a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
203b0 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
203c0 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
203d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
203e0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
203f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20400 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
20410 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
20420 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
20430 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
20440 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
20450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
20460 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
20470 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
20480 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
20490 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
204a0 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
204b0 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
204c0 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
204d0 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
204e0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
204f0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
20500 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
20510 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
20520 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
20530 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
20540 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
20550 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20560 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
20570 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
20580 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
20590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
205a0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
205b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
205c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
205d0 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
205e0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
205f0 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
20600 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
20610 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
20620 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
20630 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
20640 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
20650 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
20660 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
20670 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
20680 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
20690 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
206a0 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
206b0 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
206c0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
206d0 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
206e0 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
206f0 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
20700 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
20710 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
20720 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63  t sqlite3CodeOnc
20730 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74  e(Parse *);..Bit
20740 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
20750 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
20760 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
20770 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
20780 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
20790 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
207a0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
207b0 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
207c0 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
207d0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
207e0 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
207f0 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
20800 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
20810 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71  Bitvec*);.int sq
20820 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
20830 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
20840 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  ;..RowSet *sqlit
20850 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
20860 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e  ite3*, void*, un
20870 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69  signed int);.voi
20880 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
20890 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76  lear(RowSet*);.v
208a0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
208b0 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
208c0 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
208d0 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
208e0 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
208f0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
20900 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
20910 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
20920 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
20930 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
20940 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
20950 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
20960 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
20970 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
20980 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
20990 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
209a0 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
209b0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
209c0 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
209d0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
209e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
209f0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
20a00 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
20a10 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ..void sqlite3Dr
20a20 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
20a30 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
20a40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20a50 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
20a60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
20a70 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20a80 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
20a90 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
20aa0 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
20ab0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
20ac0 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
20ad0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
20ae0 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
20af0 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
20b00 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
20b10 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
20b20 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
20b30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
20b40 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
20b50 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
20b60 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
20b70 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f  End(X).#endif.vo
20b80 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
20b90 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
20ba0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
20bb0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
20bc0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
20bd0 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
20be0 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
20bf0 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
20c00 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
20c10 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
20c20 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
20c30 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
20c40 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
20c50 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
20c60 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
20c70 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
20c80 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
20c90 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
20ca0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
20cb0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
20cc0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
20cd0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
20ce0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
20cf0 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
20d00 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
20d10 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
20d20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
20d50 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
20d60 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
20d70 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
20d80 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
20d90 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
20da0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
20db0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
20dc0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
20dd0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
20de0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
20df0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
20e00 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
20e10 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
20e20 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
20e30 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
20e40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
20e50 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
20e60 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
20e70 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
20e80 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
20e90 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
20ea0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
20eb0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
20ec0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
20ed0 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20  ,char**);.Index 
20ee0 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
20ef0 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
20f00 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
20f10 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
20f20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
20f50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20f60 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
20f70 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
20f80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
20f90 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
20fa0 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
20fb0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
20fc0 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
20fd0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
20fe0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
20ff0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21010 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
21020 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
21030 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
21040 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
21050 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
21060 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
21070 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
21080 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
21090 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
210a0 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
210b0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
210c0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
210d0 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
210e0 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
210f0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
21100 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
21110 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
21120 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
21130 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21140 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
21150 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
21160 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
21170 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
21180 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
21190 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
211a0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
211b0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
211c0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
211d0 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
211e0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
211f0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
21200 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
21210 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
21220 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
21230 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
21240 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
21250 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
21260 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
21270 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
21280 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
21290 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
212a0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
212b0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
212c0 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
212d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
212e0 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
212f0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21300 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
21310 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
21320 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43  nt sqlite3WhereC
21330 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65  ontinueLabel(Whe
21340 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
21350 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c  lite3WhereBreakL
21360 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
21370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
21380 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72  reOkOnePass(Wher
21390 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69  eInfo*, int*);.i
213a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
213b0 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
213c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
213d0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
213e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
213f0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
21400 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
21410 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
21420 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21430 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
21440 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
21450 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21460 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
21470 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
21480 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21490 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
214a0 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
214b0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
214c0 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Pop(Parse*);.voi
214d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
214e0 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
214f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21500 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
21510 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
21520 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21530 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
21540 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
21550 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21560 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
21570 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
21580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21590 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
215a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
215b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
215c0 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
215d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
215e0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
215f0 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
21600 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
21610 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
21620 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
21630 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
21640 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21650 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
21660 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
21670 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
21680 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c  te3ExprCodeExprL
21690 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
216a0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  List*, int, u8);
216b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
216c0 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
216d0 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
216e0 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
216f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
21700 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
21710 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
21720 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
21730 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ms */.void sqlit
21740 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
21750 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
21760 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21770 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
21780 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
21790 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
217a0 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
217b0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
217c0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
217d0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
217e0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
217f0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
21800 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
21810 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
21820 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
21830 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
21840 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75  ,int isView,stru
21850 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
21860 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
21870 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
21880 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21890 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
218a0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
218b0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
218c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
218d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
218e0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
218f0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
21900 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
21910 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21920 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
21930 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
21940 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
21950 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
21960 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
21970 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
21980 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
21990 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
219a0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
219b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
219c0 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
219d0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
219e0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
219f0 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
21a00 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78  esExpr(Expr*, Ex
21a10 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
21a20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
21a30 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
21a40 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
21a50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21a60 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
21a70 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
21a80 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
21a90 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
21aa0 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
21ab0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
21ac0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
21ad0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
21ae0 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
21af0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
21b00 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
21b10 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  reState(void);.v
21b20 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
21b30 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
21b40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21b50 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
21b60 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
21b70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
21b80 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
21b90 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
21ba0 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
21bb0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
21bc0 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
21bd0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21be0 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61  ite3CommitTransa
21bf0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
21c00 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
21c10 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ackTransaction(P
21c20 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21c30 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61  ite3Savepoint(Pa
21c40 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  rse*, int, Token
21c50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21c60 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
21c70 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64  sqlite3 *);.void
21c80 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74   sqlite3LeaveMut
21c90 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65  exAndCloseZombie
21ca0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
21cb0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
21cc0 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e  stant(Expr*);.in
21cd0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
21ce0 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45  onstantNotJoin(E
21cf0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
21d00 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
21d10 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a  OrFunction(Expr*
21d20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
21d30 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
21d40 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
21d50 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
21d60 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
21d70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
21d80 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
21d90 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
21da0 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
21db0 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
21dc0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
21dd0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
21de0 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
21df0 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
21e00 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
21e10 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  u8,u8,u8);.void 
21e20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
21e30 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
21e40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
21e50 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69  t, int, int*);.i
21e60 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
21e70 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
21e80 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
21e90 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
21ea0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
21eb0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
21ec0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
21ed0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
21ee0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
21ef0 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
21f00 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
21f10 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
21f20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f40 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
21f50 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
21f60 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
21f70 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
21f80 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
21f90 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
21fa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
21fb0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
21fc0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
21fd0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c  , int, int, u8*,
21fe0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
21ff0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
22000 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
22010 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
22020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
22030 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
22040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
22050 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
22060 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
22070 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
22080 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
22090 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
220a0 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
220b0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
220c0 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
220d0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
220e0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
220f0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
22100 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
22110 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
22120 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
22130 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
22140 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
22150 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
22160 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22170 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
22180 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
22190 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
221a0 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
221b0 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
221c0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
221d0 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
221e0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
221f0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63  void sqlite3Func
22200 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65  DefInsert(FuncDe
22210 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a  fHash*, FuncDef*
22220 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
22230 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
22240 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
22250 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c  har*,int,int,u8,
22260 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22270 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
22280 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
22290 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
222a0 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
222b0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
222c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
222d0 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63  gisterGlobalFunc
222e0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
222f0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
22300 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
22310 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
22320 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
22330 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
22340 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
22350 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
22360 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
22370 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
22380 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22390 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
223a0 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
223b0 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
223c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
223d0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
223e0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
223f0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
22400 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
22410 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
22420 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
22430 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
22440 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
22450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22460 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
22470 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22480 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
22490 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
224a0 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
224b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
224c0 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
224d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
224e0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
224f0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
22500 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
22510 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
22520 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
22530 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
22540 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
22550 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
22560 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
22570 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
22580 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
22590 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
225a0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
225b0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
225c0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
225d0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
225e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
22600 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
22610 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
22620 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
22630 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
22640 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
22650 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
22660 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
22670 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
22680 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
22690 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
226a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
226b0 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
226c0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
226d0 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
226e0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
226f0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
22700 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
22710 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
22720 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
22730 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
22740 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
22750 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
22780 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
22790 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
227a0 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
227b0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
227c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
227d0 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
227e0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
227f0 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
22800 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
22810 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
22820 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
22830 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
22840 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
22850 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
22860 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
22870 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
22880 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
22890 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
228a0 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
228b0 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
228c0 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
228d0 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
228e0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
228f0 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
22900 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
22910 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
22920 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
22930 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
22940 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
22950 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22960 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
22970 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
22980 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
22990 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
229a0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
229b0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
229c0 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
229d0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
229e0 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
229f0 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
22a00 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
22a10 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
22a20 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
22a30 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
22a40 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
22a50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
22a60 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
22a70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22a80 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
22a90 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
22aa0 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
22ab0 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
22ac0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
22ad0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
22ae0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
22af0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
22b00 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
22b10 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
22b20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22b30 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
22b40 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
22b50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22b60 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
22b70 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
22b80 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
22b90 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
22ba0 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
22bb0 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
22bc0 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
22bd0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
22be0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
22bf0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
22c00 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
22c10 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
22c20 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
22c30 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
22c40 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
22c50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
22c60 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
22c70 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
22c80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
22c90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
22ca0 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
22cb0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
22cc0 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
22cd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
22ce0 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
22cf0 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
22d00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
22d10 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
22d20 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
22d30 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
22d40 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
22d50 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
22d60 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
22d70 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
22d80 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
22d90 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
22da0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
22db0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
22dc0 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
22dd0 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
22de0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
22df0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
22e00 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
22e10 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
22e20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
22e30 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
22e40 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
22e50 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
22e60 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
22e70 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
22e80 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
22e90 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
22ea0 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
22eb0 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
22ec0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
22ed0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
22ee0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
22ef0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
22f00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
22f10 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
22f20 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
22f30 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
22f40 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
22f50 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
22f60 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
22f70 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
22f80 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
22f90 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
22fa0 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
22fb0 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
22fc0 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
22fd0 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
22fe0 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
22ff0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
23000 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
23010 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
23020 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
23030 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
23040 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
23050 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
23060 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71  );.#endif.u64 sq
23070 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
23080 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a  (LogEst);../*.**
23090 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
230a0 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
230b0 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
230c0 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
230d0 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
230e0 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
230f0 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
23100 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
23110 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
23120 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75  file.  Code shou
23130 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f  ld use the MACRO
23140 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73   forms below, as
23150 20 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65   the Varint32 ve
23160 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f  rsions.** are co
23170 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68  ded to assume th
23180 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61  e single byte ca
23190 73 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61  se is already ha
231a0 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a  ndled (which .**
231b0 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20   the MACRO form 
231c0 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  does)..*/.int sq
231d0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
231e0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
231f0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
23200 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69  PutVarint32(unsi
23210 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29  gned char*, u32)
23220 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
23230 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
23240 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
23250 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
23260 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
23270 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
23280 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
23290 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
232a0 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
232b0 65 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65  e header of a re
232c0 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66  cord consists of
232d0 20 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69   a sequence vari
232e0 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
232f0 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69  gers..** These i
23300 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f  ntegers are almo
23310 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20  st always small 
23320 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20  and are encoded 
23330 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  as a single byte
23340 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ..** The followi
23350 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61  ng macros take a
23360 64 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61  dvantage this fa
23370 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  ct to provide a 
23380 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61  fast encode.** a
23390 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65  nd decode of the
233a0 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72   integers in a r
233b0 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49  ecord header.  I
233c0 74 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20  t is faster for 
233d0 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61  the common.** ca
233e0 73 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74  se where the int
233f0 65 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65  eger is a single
23400 20 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20   byte.  It is a 
23410 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68  little slower wh
23420 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  en the.** intege
23430 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65  r is two or more
23440 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65   bytes.  But ove
23450 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65  rall it is faste
23460 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  r..**.** The fol
23470 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f  lowing expressio
23480 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e  ns are equivalen
23490 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  t:.**.**     x =
234a0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
234b0 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a  t32( A, &B );.**
234c0 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
234d0 50 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  PutVarint32( A, 
234e0 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  B );.**.**     x
234f0 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20   = getVarint32( 
23500 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78  A, B );.**     x
23510 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20   = putVarint32( 
23520 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64  A, B );.**.*/.#d
23530 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
23540 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
23550 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
23560 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
23570 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
23580 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
23590 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
235a0 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
235b0 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
235c0 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
235d0 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
235e0 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
235f0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
23600 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  32((A),(B))).#de
23610 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
23620 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
23630 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
23640 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
23650 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
23660 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
23670 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
23680 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
23690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
236a0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
236b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
236c0 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
236d0 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
236e0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
236f0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
23700 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
23710 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
23720 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
23730 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
23740 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
23750 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
23760 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
23770 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
23780 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
23790 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
237a0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
237b0 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a  ar*,...);.void *
237c0 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
237d0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
237e0 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
237f0 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
23800 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
23810 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
23820 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
23830 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
23840 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
23850 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
23860 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20  ST) .const char 
23870 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
23880 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
23890 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
238a0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
238b0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
238c0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
238d0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
238e0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
238f0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
23900 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
23910 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
23920 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
23930 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
23940 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
23950 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
23960 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
23970 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
23980 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
23990 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
239a0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
239b0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
239c0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
239d0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
239e0 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
239f0 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
23a00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
23a10 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
23a20 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
23a30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
23a40 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
23a50 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
23a60 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
23a70 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
23a80 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
23a90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23aa0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
23ab0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
23ac0 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
23ad0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
23ae0 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
23af0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
23b00 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
23b10 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
23b20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
23b30 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
23b40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
23b50 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
23b60 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
23b70 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
23b80 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
23b90 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
23ba0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
23bb0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
23bc0 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
23bd0 20 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74   *z,int);..const
23be0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
23bf0 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
23c00 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
23c10 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
23c20 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
23c30 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
23c40 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
23c50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
23c60 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
23c70 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20  *,u8, .         
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
23c90 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
23ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
23cb0 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
23cc0 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
23cd0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
23ce0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
23cf0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
23d00 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
23d10 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
23d20 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
23d30 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
23d40 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
23d50 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
23d60 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
23d70 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
23d80 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
23d90 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
23da0 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
23db0 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
23dc0 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
23dd0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
23de0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
23df0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
23e00 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
23e10 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
23e20 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
23e30 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
23e40 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
23e50 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
23e60 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
23e70 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
23e80 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
23e90 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
23ea0 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
23eb0 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
23ec0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
23ed0 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
23ee0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
23ef0 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  SD FuncDefHash s
23f00 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63  qlite3GlobalFunc
23f10 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
23f20 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
23f30 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
23f40 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
23f50 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
23f60 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
23f70 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
23f80 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23f90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
23fa0 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
23fb0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
23fc0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
23fd0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
23fe0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
23ff0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
24000 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
24010 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
24020 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
24030 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
24040 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
24050 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
24060 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
24070 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
24080 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
24090 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
240a0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
240b0 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
240c0 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
240d0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
240e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
240f0 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
24100 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
24110 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
24120 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
24130 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
24140 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24150 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
24160 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
24170 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
24180 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
24190 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
241a0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
241b0 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
241c0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
241d0 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
241e0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
241f0 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
24200 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
24210 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
24220 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
24230 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
24240 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
24250 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
24260 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
24270 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
24280 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
24290 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
242a0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
242b0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
242c0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
242d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
242e0 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
242f0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
24300 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
24310 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
24320 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
24330 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
24340 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
24350 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
24360 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
24370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
24380 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
24390 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
243a0 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
243b0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
243c0 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
243d0 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
243e0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
243f0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
24400 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
24410 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
24420 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
24430 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
24440 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
24450 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
24460 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
24470 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
24480 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
24490 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
244a0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
244b0 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
244c0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
244d0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
244e0 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
244f0 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
24500 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
24510 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72  e3MinimumFileFor
24520 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  mat(Parse*, int,
24530 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24540 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
24550 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
24560 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
24570 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
24580 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
24590 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
245a0 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
245b0 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
245c0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
245d0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
245e0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
245f0 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
24600 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
24610 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
24620 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
24630 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
24640 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
24650 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
24660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24670 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
24680 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
24690 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
246a0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
246b0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
246c0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
246d0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
246e0 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
246f0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
24700 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
24710 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
24720 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
24730 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
24740 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
24750 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
24760 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
24770 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
24780 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
24790 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
247a0 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
247b0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
247c0 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
247d0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
247e0 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
247f0 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
24800 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24810 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
24820 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
24830 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
24840 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24850 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
24860 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
24870 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
24880 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61 63  qlite3AppendSpac
24890 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29  e(StrAccum*,int)
248a0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
248b0 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
248c0 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
248d0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
248e0 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  set(StrAccum*);.
248f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
24900 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
24910 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
24920 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
24930 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
24940 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
24950 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
24960 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
24970 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
24980 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
24990 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
249a0 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
249b0 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
249c0 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66  onst u8 *);..#if
249d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
249e0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
249f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
24a00 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
24a10 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
24a20 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
24a30 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a  ue(Parse*,Index*
24a40 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
24a50 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69  *,Expr*,u8,int,i
24a60 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
24a70 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
24a80 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
24a90 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
24aa0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
24ab0 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
24ac0 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
24ad0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
24ae0 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
24af0 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64  )(size_t));.void
24b00 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
24b10 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
24b20 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
24b30 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
24b40 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
24b50 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
24b60 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
24b70 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
24b80 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
24b90 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
24ba0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
24bb0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
24bc0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
24bd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24be0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
24bf0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
24c00 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
24c10 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
24c20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
24c30 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
24c40 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
24c50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
24c60 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
24c70 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
24c80 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
24c90 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
24ca0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
24cb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
24cc0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
24cd0 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
24ce0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
24cf0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
24d00 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
24d10 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
24d20 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
24d30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
24d40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24d50 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
24d60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
24d70 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
24d80 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
24d90 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
24da0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
24db0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
24dc0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
24dd0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
24de0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
24df0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
24e00 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
24e10 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
24e20 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
24e30 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
24e40 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
24e50 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
24e60 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
24e70 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
24e80 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
24e90 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
24ea0 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
24eb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
24ec0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
24ed0 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
24ee0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
24ef0 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
24f00 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
24f10 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
24f20 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
24f30 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
24f40 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
24f50 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
24f60 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
24f70 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
24f80 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
24f90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
24fa0 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
24fb0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
24fc0 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
24fd0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
24fe0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
24ff0 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
25000 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
25010 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
25020 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
25030 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
25040 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
25050 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
25060 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
25070 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
25080 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
25090 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
250a0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
250b0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
250c0 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
250d0 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
250e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
250f0 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
25100 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
25110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
25120 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
25130 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
25140 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
25150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
25160 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
25170 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
25180 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
25190 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
251a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
251b0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
251c0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
251d0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
251e0 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
251f0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
25200 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
25210 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
25220 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
25230 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
25240 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
25250 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
25260 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
25270 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
25280 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
25290 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
252a0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
252b0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
252c0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
252d0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
252e0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
252f0 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
25300 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
25310 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
25320 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65  value**);.sqlite
25330 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
25340 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
25350 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
25360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
25370 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
25380 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
25390 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
253a0 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
253b0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
253c0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
253d0 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
253e0 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
253f0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
25400 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
25410 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
25420 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
25430 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
25440 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
25450 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
25460 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
25470 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
25480 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
25490 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
254a0 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
254b0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
254c0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
254d0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
254e0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
254f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
25500 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
25510 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
25520 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
25530 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
25540 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
25550 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
25560 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
25570 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
25580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25590 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
255a0 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
255b0 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
255c0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
255d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
255e0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
255f0 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
25600 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
25610 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
25620 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
25630 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
25640 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
25650 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
25660 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
25670 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
25680 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
25690 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
256a0 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
256b0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
256c0 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
256d0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
256e0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
256f0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
25700 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
25710 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
25720 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
25730 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
25740 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
25750 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
25760 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
25770 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
25780 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
25790 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
257a0 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
257b0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
257c0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a  nctionality is .
257d0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
257e0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
257f0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
25800 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
25810 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
25820 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
25830 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
25840 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
25850 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
25860 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
25870 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
25880 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
25890 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
258a0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
258b0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
258c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
258d0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
258e0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
258f0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
25900 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
25910 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
25920 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
25930 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
25940 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
25950 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
25960 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
25970 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
25980 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
25990 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
259a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
259b0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
259c0 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
259d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
259e0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
259f0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
25a00 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
25a10 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
25a20 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
25a30 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
25a40 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
25a50 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
25a60 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64  b,c,d)    0.#end
25a70 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
25a80 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
25a90 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
25aa0 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
25ab0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
25ac0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
25ad0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
25ae0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
25af0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
25b00 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
25b10 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
25b20 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
25b30 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
25b40 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
25b50 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
25b60 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
25b70 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
25b80 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
25b90 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
25ba0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
25bb0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
25bc0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
25bd0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
25be0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
25bf0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
25c00 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
25c10 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
25c20 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
25c30 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
25c40 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
25c50 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
25c60 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
25c70 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
25c80 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
25c90 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
25ca0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
25cb0 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
25cc0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
25cd0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
25ce0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
25cf0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
25d00 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
25d10 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
25d20 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
25d30 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
25d40 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
25d50 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69  ().#endif..#defi
25d60 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
25d70 44 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 64  D           1.#d
25d80 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
25d90 50 48 20 20 20 20 20 20 20 20 20 20 20 20 20 32  PH             2
25da0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
25db0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 20  X_INDEX_ASC     
25dc0 20 20 33 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    3.#define IN_I
25dd0 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
25de0 20 20 20 20 20 34 0a 69 6e 74 20 73 71 6c 69 74       4.int sqlit
25df0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
25e00 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
25e10 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
25e20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
25e30 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
25e40 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
25e50 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
25e60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
25e70 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
25e80 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
25e90 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
25ea0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
25eb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25ec0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
25ed0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
25ee0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
25ef0 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
25f00 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
25f10 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
25f20 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
25f30 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
25f40 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
25f50 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
25f60 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
25f70 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
25f80 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
25f90 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
25fa0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
25fb0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
25fc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
25fd0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
25fe0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
25ff0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
26000 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
26010 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
26020 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
26030 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
26040 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
26050 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
26060 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
26070 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
26080 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
26090 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
260a0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
260b0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
260c0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
260d0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
260e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
260f0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
26100 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
26110 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
26120 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
26130 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
26140 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
26150 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
26160 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
26170 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
26180 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
26190 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
261a0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
261b0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
261c0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
261d0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
261e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
261f0 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
26200 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
26210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
26220 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
26230 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
26240 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
26250 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
26260 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
26270 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
26280 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
26290 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
262a0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
262b0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
262c0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
262d0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
262e0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
262f0 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
26300 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
26310 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
26320 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
26330 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
26340 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
26350 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
26360 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
26370 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
26380 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
26390 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
263a0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
263b0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
263c0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
263d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
263e0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
263f0 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
26400 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
26410 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
26420 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
26430 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
26440 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
26450 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
26460 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
26470 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
26480 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
26490 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
264a0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
264b0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
264c0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
264d0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
264e0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
264f0 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
26500 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
26510 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
26520 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
26530 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
26540 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
26550 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
26560 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
26570 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
26580 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
26590 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
265a0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
265b0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
265c0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
265d0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
265e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
265f0 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
26600 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
26610 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
26620 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
26630 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
26640 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
26650 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
26660 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
26670 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
26680 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
26690 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
266a0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
266b0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
266c0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
266d0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
266e0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
266f0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
26700 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
26710 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
26720 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
26730 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
26740 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
26750 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
26760 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
26770 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
26780 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
26790 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
267a0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
267b0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
267c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
267d0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
267e0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
267f0 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
26800 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
26810 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
26820 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
26830 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
26840 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
26850 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
26860 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
26870 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
26880 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
26890 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
268a0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
268b0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
268c0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
268d0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
268e0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
268f0 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
26900 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
26910 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
26920 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
26930 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
26940 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
26950 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
26960 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
26970 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
26980 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
26990 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
269a0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
269b0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
269c0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
269d0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
269e0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
269f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
26a00 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
26a10 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
26a20 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
26a30 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
26a40 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
26a50 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
26a60 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
26a70 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
26a80 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26a90 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
26aa0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
26ab0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
26ac0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
26ad0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
26ae0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26af0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
26b00 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
26b10 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
26b20 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
26b30 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
26b40 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
26b50 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
26b60 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
26b70 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
26b80 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
26b90 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
26ba0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
26bb0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
26bc0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
26bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
26be0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
26bf0 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
26c00 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
26c10 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
26c20 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
26c30 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
26c40 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
26c50 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
26c60 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
26c70 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.