/ Hex Artifact Content
Login

Artifact 10a1f056b6b40449a81cf5d708bc0d9fac053c53:


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 41  .#endif../*.** A
16b0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
16c0: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
16d0: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
16e0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
16f0: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1700: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1710: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1720: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1730: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1740: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1750: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23  ined(_MSC_VER).#
1760: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1770: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c  NOINLINE  __decl
1780: 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23  spec(noinline).#
1790: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53  else.#  define S
17a0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23  QLITE_NOINLINE.#
17b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
17c0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
17d0: 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65  FE macro must be
17e0: 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31   defined as 0, 1
17f0: 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61  , or 2..** 0 mea
1800: 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70  ns mutexes are p
1810: 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
1820: 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61  le and the libra
1830: 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74  ry is never.** t
1840: 68 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65  hreadsafe.  1 me
1850: 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ans the library 
1860: 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68  is serialized wh
1870: 69 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65  ich is the highe
1880: 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74  st.** level of t
1890: 68 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20  hreadsafety.  2 
18a0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
18b0: 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64  y is multithread
18c0: 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  ed - multiple.**
18d0: 20 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65   threads can use
18e0: 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20   SQLite as long 
18f0: 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64  as no two thread
1900: 73 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65  s try to use the
1910: 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73   same.** databas
1920: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20  e connection at 
1930: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a  the same time..*
1940: 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  *.** Older versi
1950: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
1960: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
1970: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
1980: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
1990: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a  hat for legacy..
19a0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
19b0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
19c0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
19d0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
19e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
19f0: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
1a00: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
1a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1a20: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
1a30: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
1a40: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
1a50: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
1a60: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
1a70: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
1a80: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
1a90: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
1aa0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
1ab0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
1ac0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
1ad0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
1ae0: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
1af0: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
1b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
1b10: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1b20: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
1b30: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   The SQLITE_DEFA
1b40: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61  ULT_MEMSTATUS ma
1b50: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1b60: 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30 20  ned as either 0 
1b70: 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65  or 1..** It dete
1b80: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
1b90: 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75 72  r not the featur
1ba0: 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a  es related to .*
1bb0: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
1bc0: 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61 76  MEMSTATUS are av
1bd0: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1be0: 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20  lt or not. This 
1bf0: 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20  value can.** be 
1c00: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72 75  overridden at ru
1c10: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
1c20: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
1c30: 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65   API..*/.#if !de
1c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
1c50: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
1c60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1c70: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1c80: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
1c90: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
1ca0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1cb0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
1cc0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
1cd0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
1ce0: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
1cf0: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
1d00: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
1d10: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1d20: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
1d30: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
1d40: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
1d50: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
1d60: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1d70: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
1d80: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
1d90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
1da0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
1db0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
1dc0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
1dd0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
1de0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
1df0: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
1e00: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
1e10: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
1e20: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
1e30: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
1e40: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
1e50: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
1e60: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
1e70: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
1e80: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
1e90: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
1ea0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
1eb0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
1ec0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
1ed0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
1ee0: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
1ef0: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
1f00: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
1f10: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
1f20: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
1f30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
1f40: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
1f50: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
1f60: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
1f70: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
1f80: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
1f90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1fa0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1fb0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1fc0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1fd0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1fe0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1ff0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2000: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2010: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2020: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2030: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2040: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2050: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2060: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2070: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
2080: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
2090: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
20a0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
20b0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
20c0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
20d0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
20e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20f0: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2100: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2110: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2120: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2130: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2140: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2150: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2160: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
2180: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
2190: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
21a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
21b0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
21c0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
21d0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
21e0: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
21f0: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2200: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2210: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2220: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2230: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2240: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2250: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2260: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2270: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
2280: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
2290: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
22a0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
22b0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
22c0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
22d0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
22e0: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
22f0: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2300: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2310: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2320: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2330: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2340: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2350: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2360: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2370: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
2380: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
2390: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
23a0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
23b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
23c0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
23d0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
23e0: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
23f0: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2400: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2410: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2420: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2430: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2440: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2450: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2460: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2470: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
2480: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
2490: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
24a0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
24b0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
24c0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
24d0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
24e0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
24f0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2500: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2510: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2520: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2530: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2540: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2550: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2560: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2570: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
2580: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
2590: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
25a0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
25b0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
25c0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25d0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
25e0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
25f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2600: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2610: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2620: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2640: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2650: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2660: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2670: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2680: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2690: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
26a0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
26b0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
26c0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
26d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
26e0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
26f0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2700: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2710: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2720: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2730: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2740: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2750: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2760: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2770: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2780: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2790: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
27a0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
27b0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
27c0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
27d0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
27e0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
27f0: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2800: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2810: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2820: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2830: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2840: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2850: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2860: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2870: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2880: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2890: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
28a0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
28b0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
28c0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
28d0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
28e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
28f0: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2900: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2910: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2920: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2930: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2940: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2950: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2960: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2970: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2980: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2990: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
29a0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
29b0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
29c0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
29d0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
29e0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
29f0: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2a00: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2a10: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2a20: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2a30: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2a40: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2a50: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2a60: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2a70: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2a80: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2a90: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2aa0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ab0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ac0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ad0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2ae0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2af0: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2b00: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2b10: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2b20: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b30: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2b40: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2b50: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2b60: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2b70: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2b80: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2b90: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2ba0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2bb0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2bc0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2bd0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
2be0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
2bf0: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
2c00: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
2c10: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
2c20: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
2c30: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
2c40: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
2c50: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
2c60: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
2c70: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
2c80: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
2c90: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
2ca0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
2cb0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
2cc0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
2cd0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
2ce0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
2cf0: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
2d00: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
2d10: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
2d20: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
2d30: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
2d40: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2d50: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2d60: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2d70: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
2d80: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
2d90: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
2da0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
2db0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
2dc0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
2dd0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
2de0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
2df0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
2e00: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
2e10: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
2e20: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
2e30: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
2e40: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
2e50: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
2e60: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
2e70: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
2e80: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
2e90: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
2ea0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
2eb0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
2ec0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
2ed0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
2ee0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
2ef0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
2f00: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
2f10: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
2f20: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
2f30: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
2f40: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
2f50: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
2f60: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
2f70: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
2f80: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
2f90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
2fa0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
2fb0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
2fc0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
2fd0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
2fe0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
2ff0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3000: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3010: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3020: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3030: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3040: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3050: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3060: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3070: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3080: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3090: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
30a0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
30b0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
30c0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
30d0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
30e0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
30f0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3100: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3110: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3120: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3130: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
3140: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
3150: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
3160: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
3170: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
3180: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
3190: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
31a0: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
31b0: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
31c0: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
31d0: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
31e0: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
31f0: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
3200: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
3210: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
3220: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
3230: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
3240: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
3250: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
3260: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
3270: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
3280: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
3290: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
32a0: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
32b0: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
32c0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
32d0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
32e0: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
32f0: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
3300: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
3310: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
3320: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
3330: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
3340: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
3350: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
3360: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
3370: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
3380: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
3390: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
33a0: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
33b0: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
33c0: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
33d0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
33e0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
33f0: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
3400: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
3410: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
3420: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
3430: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  h>../*.** If com
3440: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
3450: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
3460: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
3470: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
3480: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
3490: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
34a0: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
34b0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
34c0: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
34d0: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
34e0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
34f0: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
3500: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3510: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
3520: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
3530: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
3540: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
3550: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
3560: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
3570: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
3580: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
3590: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
35a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
35b0: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
35c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
35d0: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
35e0: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
35f0: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
3600: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
3610: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
3620: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
3630: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
3640: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
3650: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
3660: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
3670: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
3680: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
3690: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
36a0: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
36b0: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
36c0: 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74  C compiler .** t
36d0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
36e0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
36f0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
3700: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
3710: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
3720: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
3730: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
3740: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
3750: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
3760: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3770: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
3780: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
3790: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
37a0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
37b0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
37c0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
37d0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
37e0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
37f0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
3800: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
3810: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
3820: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
3830: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
3840: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
3850: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
3860: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
3870: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
3880: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
3890: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
38a0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
38b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
38c0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
38d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
38e0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
38f0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
3900: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
3910: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
3920: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
3930: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
3940: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
3950: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3960: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
3970: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
3980: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3990: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
39a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
39b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
39c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
39d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
39e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
39f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
3a00: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
3a10: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3a20: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
3a30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
3a40: 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e  _STORE 1.# defin
3a50: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3a60: 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  ORE_xc 1  /* Exc
3a70: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
3a80: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
3a90: 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68  ** If no value h
3aa0: 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64  as been provided
3ab0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f   for SQLITE_MAX_
3ac0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
3ad0: 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f  or if.** SQLITE_
3ae0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65  TEMP_STORE is se
3af0: 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73  t to 3 (never us
3b00: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
3b10: 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74  s), set it .** t
3b20: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
3b30: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3b40: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
3b50: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
3b60: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3b70: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3b80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b90: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3ba0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
3bb0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
3bc0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
3bd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
3be0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
3bf0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
3c10: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3c20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3c30: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
3c40: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
3c50: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3c60: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
3c70: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3c80: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
3c90: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
3ca0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
3cb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
3cc0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
3cd0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
3ce0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
3cf0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  dif.../*.** GCC 
3d00: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
3d10: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
3d20: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
3d30: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
3d40: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
3d50: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
3d60: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
3d70: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
3d80: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
3d90: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
3da0: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
3db0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
3dc0: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
3dd0: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
3de0: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
3df0: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
3e00: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
3e10: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
3e20: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
3e30: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  (B))../*.** Chec
3e40: 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73  k to see if this
3e50: 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42   machine uses EB
3e60: 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c  CDIC.  (Yes, bel
3e70: 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f  ieve it or.** no
3e80: 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69  t, there are sti
3e90: 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20  ll machines out 
3ea0: 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45  there that use E
3eb0: 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27  BCDIC.).*/.#if '
3ec0: 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64  A' == '\301'.# d
3ed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43  efine SQLITE_EBC
3ee0: 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  DIC 1.#else.# de
3ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49  fine SQLITE_ASCI
3f00: 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  I 1.#endif../*.*
3f10: 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e  * Integers of kn
3f20: 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73  own sizes.  Thes
3f30: 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74  e typedefs might
3f40: 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68   change for arch
3f50: 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65  itectures.** whe
3f60: 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72  re the sizes ver
3f70: 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72  y.  Preprocessor
3f80: 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69   macros are avai
3f90: 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68  lable so that th
3fa0: 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62  e.** types can b
3fb0: 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72  e conveniently r
3fc0: 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70  edefined at comp
3fd0: 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20  ile-type.  Like 
3fe0: 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  this:.**.**     
3ff0: 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54      cc '-DUINTPT
4000: 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67  R_TYPE=long long
4010: 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66   int' ....*/.#if
4020: 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  ndef UINT32_TYPE
4030: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
4040: 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT32_T.#  define
4050: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e   UINT32_TYPE uin
4060: 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t32_t.# else.#  
4070: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4080: 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a  PE unsigned int.
4090: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
40a0: 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ifndef UINT16_TY
40b0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
40c0: 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  UINT16_T.#  defi
40d0: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
40e0: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
40f0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
4100: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68  TYPE unsigned sh
4110: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4120: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
4130: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
4140: 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23  f HAVE_INT16_T.#
4150: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
4160: 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c  YPE int16_t.# el
4170: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
4180: 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e  16_TYPE short in
4190: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
41a0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54  .#ifndef UINT8_T
41b0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
41c0: 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  _UINT8_T.#  defi
41d0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69  ne UINT8_TYPE ui
41e0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
41f0: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
4200: 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a  E unsigned char.
4210: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
4220: 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ifndef INT8_TYPE
4230: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
4240: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  T8_T.#  define I
4250: 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a  NT8_TYPE int8_t.
4260: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4270: 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65   INT8_TYPE signe
4280: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
4290: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f  endif.#ifndef LO
42a0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20  NGDOUBLE_TYPE.# 
42b0: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
42c0: 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62  E_TYPE long doub
42d0: 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65  le.#endif.typede
42e0: 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69  f sqlite_int64 i
42f0: 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  64;          /* 
4300: 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  8-byte signed in
4310: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
4320: 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75   sqlite_uint64 u
4330: 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38  64;         /* 8
4340: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
4350: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4360: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33  f UINT32_TYPE u3
4370: 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2;           /* 
4380: 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  4-byte unsigned 
4390: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
43a0: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ef UINT16_TYPE u
43b0: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  16;           /*
43c0: 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   2-byte unsigned
43d0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43e0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69  def INT16_TYPE i
43f0: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  16;            /
4400: 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 2-byte signed 
4410: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4420: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38  ef UINT8_TYPE u8
4430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4440: 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   1-byte unsigned
4450: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4460: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38  def INT8_TYPE i8
4470: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
4480: 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 1-byte signed 
4490: 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  integer */../*.*
44a0: 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  * SQLITE_MAX_U32
44b0: 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61   is a u64 consta
44c0: 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d  nt that is the m
44d0: 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65  aximum u64 value
44e0: 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20  .** that can be 
44f0: 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20  stored in a u32 
4500: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
4510: 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65  data.  The value
4520: 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30  .** is 0x0000000
4530: 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20  0ffffffff.  But 
4540: 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b  because of quirk
4550: 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c  s of some compil
4560: 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20  ers, we.** have 
4570: 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76  to specify the v
4580: 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73  alue in the less
4590: 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65   intuitive manne
45a0: 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66  r shown:.*/.#def
45b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  ine SQLITE_MAX_U
45c0: 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c  32  ((((u64)1)<<
45d0: 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  32)-1)../*.** Th
45e0: 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20  e datatype used 
45f0: 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74  to store estimat
4600: 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  es of the number
4610: 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a   of rows in a.**
4620: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
4630: 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73    This is an uns
4640: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79  igned integer ty
4650: 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f  pe.  For 99.9% o
4660: 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20  f.** the world, 
4670: 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  a 32-bit integer
4680: 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20   is sufficient. 
4690: 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e   But a 64-bit in
46a0: 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20  teger.** can be 
46b0: 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  used at compile-
46c0: 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e  time if desired.
46d0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
46e0: 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74  E_64BIT_STATS. t
46f0: 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63  ypedef u64 tRowc
4700: 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  nt;    /* 64-bit
4710: 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74   only if request
4720: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4730: 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70  me */.#else. typ
4740: 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74  edef u32 tRowcnt
4750: 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69  ;    /* 32-bit i
4760: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  s the default */
4770: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
4780: 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74  stimated quantit
4790: 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65  ies used for que
47a0: 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20  ry planning are 
47b0: 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74  stored as 16-bit
47c0: 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20  .** logarithms. 
47d0: 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c   For quantity X,
47e0: 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
47f0: 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e  d is 10*log2(X).
4800: 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20    This.** gives 
4810: 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65  a possible range
4820: 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70   of values of ap
4830: 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65  proximately 1.0e
4840: 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a  986 to 1e-986..*
4850: 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65  * But the allowe
4860: 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72  d values are "gr
4870: 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72  ainy".  Not ever
4880: 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65  y value is repre
4890: 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72  sentable..** For
48a0: 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69   example, quanti
48b0: 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61  ties 16 and 17 a
48c0: 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e  re both represen
48d0: 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a  ted by a LogEst.
48e0: 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76  ** of 40.  Howev
48f0: 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74  er, since LogEst
4900: 20 71 75 61 6e 74 61 74 69 65 73 20 61 72 65 20   quantaties are 
4910: 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73  suppose to be es
4920: 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20  timates,.** not 
4930: 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68  exact values, th
4940: 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69  is imprecision i
4950: 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e  s not a problem.
4960: 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20  .**.** "LogEst" 
4970: 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f  is short for "Lo
4980: 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61  garithmic Estima
4990: 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70  te"..**.** Examp
49a0: 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d  les:.**      1 -
49b0: 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20  > 0             
49c0: 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20   20 -> 43       
49d0: 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a     10000 -> 132.
49e0: 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20  **      2 -> 10 
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d              25 -
4a00: 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35  > 46          25
4a10: 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20  000 -> 146.**   
4a20: 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20     3 -> 16      
4a30: 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20        100 -> 66 
4a40: 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d         1000000 -
4a50: 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20  > 199.**      4 
4a60: 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20  -> 20           
4a70: 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20  1000 -> 99      
4a80: 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30    1048576 -> 200
4a90: 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33  .**     10 -> 33
4aa0: 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20             1024 
4ab0: 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36  -> 100    429496
4ac0: 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a  7296 -> 320.**.*
4ad0: 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e  * The LogEst can
4ae0: 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20   be negative to 
4af0: 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f  indicate fractio
4b00: 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20  nal values. .** 
4b10: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
4b20: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
4b30: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
4b40: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
4b50: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
4b60: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
4b70: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  gEst;../*.** Mac
4b80: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
4b90: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
4ba0: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
4bb0: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
4bc0: 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
4bd0: 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69  not that determi
4be0: 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69  nation is run-ti
4bf0: 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69  me or compile-ti
4c00: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65  me..**.** For be
4c10: 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  st performance, 
4c20: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
4c30: 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74  de to guess at t
4c40: 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a  he byte-order.**
4c50: 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63   using C-preproc
4c60: 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49  essor macros.  I
4c70: 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63  f that is unsucc
4c80: 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a  essful, or if.**
4c90: 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d   -DSQLITE_RUNTIM
4ca0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73  E_BYTEORDER=1 is
4cb0: 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d   set, then byte-
4cc0: 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69  order is determi
4cd0: 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69  ned.** at run-ti
4ce0: 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  me..*/.#ifdef SQ
4cf0: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
4d00: 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  N.const int sqli
4d10: 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73  te3one = 1;.#els
4d20: 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69  e.extern const i
4d30: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23  nt sqlite3one;.#
4d40: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
4d50: 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20  ed(i386)     || 
4d60: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
4d70: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
4d80: 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a  M_IX86) ||    \.
4d90: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78       defined(__x
4da0: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
4db0: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c  d(__x86_64__) ||
4dc0: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29   defined(_M_X64)
4dd0: 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64    ||    \.     d
4de0: 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29  efined(_M_AMD64)
4df0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
4e00: 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  RM)     || defin
4e10: 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20  ed(__x86)   ||  
4e20: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
4e30: 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64  (__arm__)) && !d
4e40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55  efined(SQLITE_RU
4e50: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29  NTIME_BYTEORDER)
4e60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4e70: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
4e80: 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  34.# define SQLI
4e90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4ea0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4eb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4ec0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4ed0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4ee0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e  LITE_UTF16LE.#en
4ef0: 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64  dif.#if (defined
4f00: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
4f10: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20  fined(__ppc__)) 
4f20: 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e   \.    && !defin
4f30: 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d  ed(SQLITE_RUNTIM
4f40: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64  E_BYTEORDER).# d
4f50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
4f60: 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23  EORDER    4321.#
4f70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
4f80: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
4f90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
4fa0: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
4fb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
4fc0: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
4fd0: 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a  _UTF16BE.#endif.
4fe0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
4ff0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  ITE_BYTEORDER).#
5000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5010: 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20  YTEORDER    0   
5020: 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e    /* 0 means "un
5030: 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65  known at compile
5040: 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69  -time" */.# defi
5050: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5060: 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a  IAN    (*(char *
5070: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5080: 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  0).# define SQLI
5090: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
50a0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
50b0: 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65  te3one)==1).# de
50c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
50d0: 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45  6NATIVE  (SQLITE
50e0: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
50f0: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
5100: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
5110: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74  ../*.** Constant
5120: 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73  s for the larges
5130: 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70  t and smallest p
5140: 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73  ossible 64-bit s
5150: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a  igned integers..
5160: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
5170: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
5180: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
5190: 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  n both 32-bit an
51a0: 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70  d 64-bit.** comp
51b0: 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ilers..*/.#defin
51c0: 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  e LARGEST_INT64 
51d0: 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28   (0xffffffff|(((
51e0: 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  i64)0x7fffffff)<
51f0: 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d  <32)).#define SM
5200: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28  ALLEST_INT64 (((
5210: 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53  i64)-1) - LARGES
5220: 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a  T_INT64)../* .**
5230: 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62   Round up a numb
5240: 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c  er to the next l
5250: 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f  arger multiple o
5260: 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73  f 8.  This is us
5270: 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38  ed.** to force 8
5280: 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20  -byte alignment 
5290: 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74  on 64-bit archit
52a0: 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66  ectures..*/.#def
52b0: 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20  ine ROUND8(x)   
52c0: 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a    (((x)+7)&~7)..
52d0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e  /*.** Round down
52e0: 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20   to the nearest 
52f0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f  multiple of 8.*/
5300: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f  .#define ROUNDDO
5310: 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a  WN8(x) ((x)&~7).
5320: 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68  ./*.** Assert th
5330: 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58  at the pointer X
5340: 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61   is aligned to a
5350: 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72  n 8-byte boundar
5360: 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72  y.  This.** macr
5370: 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77  o is used only w
5380: 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74  ithin assert() t
5390: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
53a0: 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61  e code gets.** a
53b0: 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73  ll alignment res
53c0: 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63  trictions correc
53d0: 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c  t..**.** Except,
53e0: 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54   if SQLITE_4_BYT
53f0: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
5400: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
5410: 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79  n the.** underly
5420: 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70  ing malloc() imp
5430: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
5440: 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79  t return us 4-by
5450: 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f  te aligned.** po
5460: 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74  inters.  In that
5470: 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69   case, only veri
5480: 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d  fy 4-byte alignm
5490: 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ent..*/.#ifdef S
54a0: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
54b0: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65  GNED_MALLOC.# de
54c0: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
54d0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
54e0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
54f0: 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a  char*)0)&3)==0).
5500: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
5510: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
5520: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
5530: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
5540: 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66  0)&7)==0).#endif
5550: 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20  ../*.** Disable 
5560: 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d  MMAP on platform
5570: 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e  s where it is kn
5580: 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a  own to not work.
5590: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
55a0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64  _OpenBSD__) || d
55b0: 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f  efined(__QNXNTO_
55c0: 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  _).# undef SQLIT
55d0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
55e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
55f0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
5600: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
5610: 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69  fault maximum si
5620: 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65  ze of memory use
5630: 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70  d by memory-mapp
5640: 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46  ed I/O in the VF
5650: 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50  S.*/.#ifdef __AP
5660: 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20  PLE__.# include 
5670: 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e  <TargetCondition
5680: 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47  als.h>.# if TARG
5690: 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20  ET_OS_IPHONE.#  
56a0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
56b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20  X_MMAP_SIZE.#   
56c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
56d0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
56e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
56f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5700: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
5710: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
5720: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
5730: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
5740: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
5750: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
5760: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
5770: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a   defined(__sun).
5780: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5790: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
57a0: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
57b0: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
57c0: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
57d0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
57e0: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20  IZE 0.# endif.# 
57f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5800: 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  X_MMAP_SIZE_xc 1
5810: 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d   /* exclude from
5820: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
5830: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
5840: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
5850: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
5860: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
5870: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
5880: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
5890: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
58a0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
58b0: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
58c0: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
58d0: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
58e0: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
58f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
5910: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
5920: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5930: 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20  SIZE 0.# define 
5940: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5950: 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f  MAP_SIZE_xc 1  /
5960: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
5970: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
5980: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5990: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
59a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
59b0: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
59c0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
59d0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
59e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
59f0: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
5a00: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
5a10: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e  f../*.** Only on
5a20: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
5a30: 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49  LE_STAT3 or SQLI
5a40: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20  TE_ENABLE_STAT4 
5a50: 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a  can be defined..
5a60: 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67  ** Priority is g
5a70: 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45  iven to SQLITE_E
5a80: 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66  NABLE_STAT4.  If
5a90: 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69   either are defi
5aa0: 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66  ned, also.** def
5ab0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
5ac0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5ad0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
5ae0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23  E_ENABLE_STAT4.#
5af0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
5b00: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
5b10: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
5b20: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5b30: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
5b40: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
5b50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
5b60: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5b70: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
5b80: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5b90: 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  R_STAT4.# undef 
5ba0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5bb0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e  AT3_OR_STAT4.#en
5bc0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5bd0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5be0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5bf0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5c00: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5c10: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5c20: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5c30: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5c40: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5c50: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5c60: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5c70: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5c80: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5c90: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5ca0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5cb0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5cc0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5cd0: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5ce0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5cf0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5d00: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5d10: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5d20: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5d30: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5d40: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5d50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5d60: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5d70: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5d80: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5d90: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5da0: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5db0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5dc0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5de0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5df0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5e00: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5e20: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5e30: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5e40: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5e50: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5e60: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5e70: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5e80: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5e90: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5ea0: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
5eb0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
5ec0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
5ed0: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
5ee0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
5ef0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
5f00: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
5f10: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
5f20: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
5f30: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
5f40: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
5f50: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
5f60: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
5f70: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
5f80: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
5f90: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
5fa0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
5fb0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
5fc0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
5fd0: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
5fe0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
5ff0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6000: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6010: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6020: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6030: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6040: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6050: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6060: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
6070: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
6080: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
6090: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
60a0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
60b0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
60c0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
60d0: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
60e0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
60f0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6100: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6110: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6120: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6130: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6140: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6150: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6160: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
6170: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
6180: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
6190: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
61a0: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
61b0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
61c0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
61d0: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
61e0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
61f0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6200: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6210: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6220: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6230: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6240: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6250: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6260: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
6270: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
6280: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
6290: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
62a0: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
62b0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
62c0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
62d0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
62e0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
62f0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6300: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6310: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6320: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6330: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6340: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6350: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6360: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
6370: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
6380: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
6390: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
63a0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
63b0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
63c0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
63d0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
63e0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
63f0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6400: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
6410: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
6420: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
6430: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6440: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6450: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6460: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
6470: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
6480: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
6490: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
64a0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
64b0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
64c0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
64d0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
64e0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
64f0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6500: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6510: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6520: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6530: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6540: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6550: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6560: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
6570: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
6580: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
6590: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
65a0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
65b0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
65c0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
65d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
65e0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
65f0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6600: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6610: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6620: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6630: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6640: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6650: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6660: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
6670: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
6680: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
6690: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
66a0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
66b0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
66c0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
66d0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
66e0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
66f0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6700: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6710: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6720: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6730: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6740: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6750: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6760: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
6770: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
6780: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
6790: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
67a0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
67b0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
67c0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
67d0: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
67e0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
67f0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6800: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6810: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6820: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6830: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6840: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6850: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6860: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
6870: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
6880: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
6890: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
68a0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
68b0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
68c0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
68d0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
68e0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
68f0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6900: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6910: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6920: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6930: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6940: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6950: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6960: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6970: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6980: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6990: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
69a0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
69b0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
69c0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
69d0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
69e0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
69f0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6a00: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6a10: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6a20: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6a30: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6a40: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6a50: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6a60: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6a70: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6a80: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6a90: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6aa0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6ab0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6ac0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6ad0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6ae0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6af0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6b00: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6b10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6b20: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6b40: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6b50: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6b60: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6b70: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6b80: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6b90: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6ba0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6bb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6bc0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6bd0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6be0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6bf0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6c00: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6c10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c20: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6c30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c40: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6c50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6c60: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6c70: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6c80: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6c90: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6ca0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6cb0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6cd0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6ce0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cf0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6d00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6d10: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6d20: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6d30: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6d40: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6d50: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6d60: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6d70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d80: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6d90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6da0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6db0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6dc0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6dd0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6de0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6df0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6e00: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6e10: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6e20: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6e30: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6e40: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6e50: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6e60: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6e70: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6e80: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6e90: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6ea0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
6eb0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
6ec0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
6ed0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
6ee0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
6ef0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
6f00: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
6f10: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
6f20: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
6f30: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
6f40: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
6f50: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
6f60: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
6f70: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
6f80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f90: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
6fa0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
6fb0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
6fc0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
6fd0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
6fe0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
6ff0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7000: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7010: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7020: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7030: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7040: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7050: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
7060: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
7070: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
7080: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
7090: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
70a0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
70b0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
70c0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
70d0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
70e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70f0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
7100: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
7110: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
7120: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
7130: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
7140: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
7150: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
7160: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7170: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
7180: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
7190: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
71a0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
71b0: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
71c0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
71d0: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
71e0: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
71f0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
7200: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
7210: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
7220: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
7230: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
7240: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
7250: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
7260: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
7270: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
7280: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
7290: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
72a0: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
72b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
72c0: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
72d0: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
72e0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
72f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7300: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
7310: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
7320: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
7330: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
7340: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7350: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7360: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7370: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
7380: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
7390: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
73a0: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
73b0: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
73c0: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
73d0: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
73e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
73f0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
7400: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
7410: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
7420: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
7430: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
7440: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7450: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7460: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
7470: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
7480: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
7490: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
74a0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
74b0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
74c0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
74d0: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
74e0: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
74f0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
7500: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7510: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7520: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
7530: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
7540: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7550: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7560: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
7570: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
7580: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
7590: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
75a0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
75b0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
75c0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
75d0: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
75e0: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
75f0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
7600: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
7610: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
7620: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
7630: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
7640: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7650: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7660: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
7670: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
7680: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
7690: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
76a0: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
76b0: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
76c0: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
76d0: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
76e0: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
76f0: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
7700: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
7710: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
7720: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
7730: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
7740: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7750: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7760: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
7770: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
7780: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
7790: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
77a0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
77b0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
77c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
77d0: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
77e0: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
77f0: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
7800: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
7810: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
7820: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
7830: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
7840: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7850: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7860: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
7870: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
7880: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
7890: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
78a0: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
78b0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
78c0: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
78d0: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
78e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
78f0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
7900: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7910: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
7920: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
7930: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
7940: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7950: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7960: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7970: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7980: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7990: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
79a0: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
79b0: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
79c0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
79d0: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
79e0: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
79f0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
7a00: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
7a10: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
7a20: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
7a30: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
7a40: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7a50: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7a60: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7a70: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7a80: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7a90: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7aa0: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
7ab0: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7ac0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7ad0: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7ae0: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7af0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7b00: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7b10: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
7b20: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
7b30: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7b40: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7b50: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7b60: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7b70: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7b80: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7b90: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7ba0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7bb0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7bc0: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
7bd0: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
7be0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7bf0: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7c00: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7c10: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7c20: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7c30: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7c40: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7c50: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
7c60: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
7c70: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
7c80: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
7c90: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7ca0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
7cb0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
7cc0: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
7cd0: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7ce0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
7cf0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
7d00: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
7d10: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7d20: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
7d30: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
7d40: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
7d50: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
7d60: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
7d70: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
7d80: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
7d90: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
7da0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
7db0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
7dc0: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
7dd0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
7de0: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
7df0: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
7e00: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
7e10: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
7e20: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
7e30: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
7e40: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7e50: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
7e60: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
7e70: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
7e80: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
7e90: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
7ea0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
7eb0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
7ec0: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
7ed0: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
7ee0: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
7ef0: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ) */../*.** The 
7f00: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
7f10: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
7f20: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
7f30: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
7f40: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
7f50: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
7f60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
7f70: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
7f80: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
7f90: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
7fa0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
7fb0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
7fc0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
7fd0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
7fe0: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
7ff0: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
8000: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8010: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
8020: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
8030: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
8040: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8050: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
8060: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
8070: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
8080: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
8090: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
80a0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
80b0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
80c0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
80d0: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
80e0: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
80f0: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
8100: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
8110: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
8120: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
8130: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
8140: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
8150: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
8160: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
8170: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
8180: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
8190: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
81a0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
81b0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
81c0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
81d0: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
81e0: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
81f0: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8200: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
8210: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
8220: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
8230: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
8240: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8250: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
8260: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
8270: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
8280: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
8290: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
82a0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
82b0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
82c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
82d0: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
82e0: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
82f0: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
8300: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
8310: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
8320: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
8330: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
8340: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
8350: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
8360: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
8370: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
8380: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
8390: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
83a0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
83b0: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
83c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
83d0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
83e0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
83f0: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
8400: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
8410: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
8420: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
8430: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
8440: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
8450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
8460: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
8470: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
8480: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
8490: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
84a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
84b0: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
84c0: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
84d0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
84e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
84f0: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
8500: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
8510: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
8520: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
8530: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
8540: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
8550: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
8560: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
8570: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
8580: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
8590: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
85a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
85b0: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
85c0: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
85d0: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
85e0: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
85f0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
8600: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
8610: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
8620: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8630: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
8640: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
8650: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
8660: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
8670: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
8680: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
8690: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
86a0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
86b0: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
86c0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
86d0: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
86e0: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
86f0: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
8700: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
8710: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
8720: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
8730: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
8740: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
8750: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
8760: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
8770: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64  ions */.};..#ifd
8780: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
8790: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
87a0: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
87b0: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
87c0: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
87d0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
87e0: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
87f0: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
8800: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
8810: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
8820: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
8830: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
8840: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
8850: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
8860: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
8870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
8880: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
8890: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
88a0: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
88c0: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
88d0: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
88e0: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
88f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8900: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
8910: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8920: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
8930: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
8940: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
8950: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
8960: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
8970: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8980: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
8990: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
89a0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
89b0: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
89c0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
89d0: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
89e0: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
89f0: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
8a00: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
8a10: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
8a20: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
8a30: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
8a40: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
8a50: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
8a60: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
8a70: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
8a80: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
8a90: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
8aa0: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
8ab0: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
8ac0: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
8ad0: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
8ae0: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
8af0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
8b00: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
8b10: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
8b20: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
8b30: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
8b40: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 0a 23 65 6e  char*,u8*);..#en
8b50: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
8b60: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
8b70: 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  N */.../*.** Eac
8b80: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
8b90: 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74  ction is an inst
8ba0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
8bb0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
8bc0: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
8bd0: 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e3 {.  sqlite3_v
8be0: 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20  fs *pVfs;       
8bf0: 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72       /* OS Inter
8c00: 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  face */.  struct
8c10: 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
8c20: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
8c30: 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61  of active virtua
8c40: 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20  l machines */.  
8c50: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
8c60: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
8c70: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
8c80: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
8c90: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71  (BINARY) */.  sq
8ca0: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
8cb0: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
8cc0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
8cd0: 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20  */.  Db *aDb;   
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cf0: 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e     /* All backen
8d00: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b  ds */.  int nDb;
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8d30: 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72  of backends curr
8d40: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
8d50: 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20    int flags;    
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d70: 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73  /* Miscellaneous
8d80: 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f   flags. See belo
8d90: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
8da0: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
8db0: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
8dc0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
8dd0: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
8de0: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
8e10: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
8e20: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
8e30: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
8e40: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
8e50: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
8e60: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
8e70: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8e90: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
8ea0: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
8eb0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
8ec0: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
8ed0: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
8ee0: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
8ef0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
8f00: 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  g */.  u16 dbOpt
8f10: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
8f20: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
8f30: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
8f40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
8f50: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
8f60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8f70: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
8f80: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
8f90: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8fb0: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
8fc0: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
8fd0: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
8fe0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
8ff0: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
9000: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
9010: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
9020: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
9030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9040: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
9050: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
9060: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
9070: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
9080: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
9090: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
90a0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
90b0: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
90c0: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
90d0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
90e0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
90f0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
9100: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
9110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
9120: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
9130: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
9140: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
9150: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
9160: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
9170: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
9180: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
9190: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20  s a TS */.  int 
91a0: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
91b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
91c0: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
91d0: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
91e0: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
9200: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
9210: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
9220: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
9230: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
9240: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
9250: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
9260: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
9270: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
9280: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
9290: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
92a0: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
92b0: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
92c0: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
92d0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
92e0: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
92f0: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
9300: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
9310: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
9320: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
9330: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
9340: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
9350: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
9360: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
9370: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
9380: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
9390: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
93b0: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
93c0: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
93d0: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
93e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
93f0: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
9400: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
9410: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
9420: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9440: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
9450: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
9460: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
9470: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
9480: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
9490: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
94a0: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
94b0: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
94c0: 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20  t nVdbeActive;  
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
94e0: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
94f0: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
9500: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52   */.  int nVdbeR
9510: 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ead;            
9520: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9530: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
9540: 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  at read or write
9550: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57   */.  int nVdbeW
9560: 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
9570: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9580: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
9590: 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  at read and writ
95a0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
95b0: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
95c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
95d0: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
95e0: 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a  o VdbeExec() */.
95f0: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
9600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9610: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
9620: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
9630: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
9640: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
9650: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
9660: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
9670: 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  dles */.  void (
9680: 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63  *xTrace)(void*,c
9690: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20  onst char*);    
96a0: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
96b0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
96c0: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96e0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
96f0: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
9700: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
9710: 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69   (*xProfile)(voi
9720: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  d*,const char*,u
9730: 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69  64);  /* Profili
9740: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ng function */. 
9750: 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41   void *pProfileA
9760: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9780: 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c  gument to profil
9790: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
97a0: 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67  void *pCommitArg
97b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
97c0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
97d0: 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b   xCommitCallback
97e0: 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28  () */   .  int (
97f0: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
9800: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
9810: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
9820: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
9830: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
9840: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9850: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
9860: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
9870: 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20  () */   .  void 
9880: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
9890: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
98a0: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
98b0: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
98c0: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
98d0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
98e0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
98f0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
9900: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
9910: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e  ite_int64);.#ifn
9920: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9930: 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c  WAL.  int (*xWal
9940: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a  Callback)(void *
9950: 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  , sqlite3 *, con
9960: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
9970: 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67  .  void *pWalArg
9980: 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28  ;.#endif.  void(
9990: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
99a0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
99b0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
99c0: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a  char*);.  void(*
99d0: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
99e0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
99f0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
9a00: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
9a10: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b  *pCollNeededArg;
9a20: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
9a30: 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20   *pErr;         
9a40: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
9a50: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
9a60: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
9a70: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
9a80: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
9a90: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
9aa0: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
9ab0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
9ac0: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
9ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
9ae0: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
9af0: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
9b00: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
9b10: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
9b20: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
9b30: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
9b40: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
9b50: 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78  ZATION.  int (*x
9b60: 41 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  Auth)(void*,int,
9b70: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9b80: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
9b90: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
9ba0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bc0: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
9bd0: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
9be0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
9bf0: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
9c00: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
9c10: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
9c20: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
9c30: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
9c40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9c50: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
9c60: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
9c70: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
9c80: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
9c90: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
9ca0: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
9cb0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
9cc0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
9cd0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
9ce0: 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ck */.  unsigned
9cf0: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20   nProgressOps;  
9d00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9d10: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
9d20: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
9d30: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
9d40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
9d50: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
9d60: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9d80: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
9d90: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
9da0: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
9dc0: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
9dd0: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
9de0: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
9df0: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
9e00: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
9e10: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
9e20: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
9e30: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
9e40: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
9e50: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
9e60: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
9e70: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
9e80: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
9e90: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
9ea0: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
9eb0: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
9ec0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
9ed0: 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20  f.  FuncDefHash 
9ee0: 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  aFunc;          
9ef0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
9f00: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
9f10: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
9f20: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
9f30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9f40: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
9f50: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
9f60: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
9f70: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
9f80: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
9f90: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9fb0: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
9fc0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
9fd0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
9fe0: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
9ff0: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
a000: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
a010: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
a020: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
a030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
a040: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
a050: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
a060: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a080: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
a090: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
a0a0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
a0b0: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
a0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a0d0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
a0e0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
a0f0: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
a100: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
a110: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
a120: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
a130: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
a140: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
a150: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
a160: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
a170: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
a180: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
a190: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
a1a0: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
a1b0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
a1c0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
a1d0: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
a1e0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
a1f0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
a200: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
a210: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
a220: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
a230: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
a240: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
a250: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
a260: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
a270: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
a280: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
a290: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
a2a0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
a2b0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
a2c0: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
a2d0: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
a2e0: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
a2f0: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
a300: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
a310: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
a320: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
a330: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
a340: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
a350: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
a360: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
a370: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
a380: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
a390: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
a3a0: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
a3b0: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
a3c0: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
a3d0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
a3e0: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
a3f0: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
a400: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
a410: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
a420: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
a430: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
a440: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
a450: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a470: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
a480: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
a490: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
a4a0: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
a4b0: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
a4c0: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
a4d0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
a4e0: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
a4f0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
a500: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
a510: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
a520: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  /.#endif.#ifdef 
a530: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
a540: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c  ENTICATION.  sql
a550: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75  ite3_userauth au
a560: 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73  th;        /* Us
a570: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
a580: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  n information */
a590: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
a5a0: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
a5b0: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
a5c0: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
a5d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43  ..*/.#define ENC
a5e0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
a5f0: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
a600: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
a610: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a620: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
a630: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a640: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
a650: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
a660: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
a670: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
a680: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
a690: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
a6a0: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
a6b0: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
a6c0: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
a6d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
a6e0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
a6f0: 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66  000004  /* Use f
a700: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
a710: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
a720: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
a730: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
a740: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
a750: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
a760: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
a770: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
a780: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
a790: 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  10  /* OK to spi
a7a0: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
a7b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a7c0: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
a7d0: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53  0x00000020  /* S
a7e0: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
a7f0: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
a800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a810: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
a820: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
a830: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
a840: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
a850: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
a860: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
a870: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
a880: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
a890: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8c0: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
a8d0: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
a8e0: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a910: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
a920: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
a930: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
a940: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
a950: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
a960: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
a970: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
a980: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9b0: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
a9c0: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
a9d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
a9e0: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
a9f0: 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00200  /* Debug 
aa00: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
aa10: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
aa20: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
aa30: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
aa40: 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0400  /* Debug l
aa50: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
aa60: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
aa70: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
aa80: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
aa90: 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0800  /* OK to u
aaa0: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
aab0: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
aac0: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
aad0: 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20  race 0x00001000 
aae0: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
aaf0: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
ab00: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
ab10: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
ab20: 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20  s   0x00002000  
ab30: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
ab40: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
ab50: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
ab60: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
ab70: 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20  itted 0x0004000 
ab80: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
ab90: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
aba0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
abb0: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
abc0: 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  08000  /* Create
abd0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
abe0: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
abf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
ac00: 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30  overyMode   0x00
ac10: 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72  010000  /* Ignor
ac20: 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20  e schema errors 
ac30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ac40: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
ac50: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
ac60: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
ac70: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
ac80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
ac90: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
aca0: 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  40000  /* Enable
acb0: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
acc0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
acd0: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
ace0: 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20  s    0x00080000 
acf0: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
ad00: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
ad10: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
ad20: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
ad30: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
ad40: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
ad50: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
ad60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad70: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
ad80: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72  x00200000  /* Pr
ad90: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
ada0: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
adb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
adc0: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
add0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
ade0: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
adf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae00: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
ae10: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
ae20: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
ae30: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
ae40: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
ae50: 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30  FKs       0x0100
ae60: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
ae70: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
ae80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ae90: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
aea0: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
aeb0: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
aec0: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
aed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
aee0: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34  eEQP        0x04
aef0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
af00: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
af10: 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42  LAN */.../*.** B
af20: 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  its of the sqlit
af30: 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69  e3.dbOptFlags fi
af40: 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65  eld that are use
af50: 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  d by the.** sqli
af60: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
af70: 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
af80: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e  _OPTIMIZATIONS,.
af90: 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ..) interface to
afa0: 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20  .** selectively 
afb0: 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20  disable various 
afc0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
afd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
afe0: 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20  _QueryFlattener 
aff0: 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72  0x0001   /* Quer
b000: 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a  y flattening */.
b010: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
b020: 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78  olumnCache    0x
b030: 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  0002   /* Column
b040: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
b050: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
b060: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
b070: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
b080: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
b090: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b0a0: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
b0b0: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
b0c0: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
b0d0: 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /*              
b0e0: 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78    not used    0x
b0f0: 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53  0010   // Was: S
b100: 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49  QLITE_IdxRealAsI
b110: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
b120: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
b130: 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20      0x0020   /* 
b140: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
b150: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
b160: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
b170: 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20  xScan   0x0040  
b180: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
b190: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
b1a0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
b1b0: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30  ByIdxJoin 0x0080
b1c0: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
b1d0: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
b1e0: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
b1f0: 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e  ITE_SubqCoroutin
b200: 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45  e  0x0100   /* E
b210: 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69  valuate subqueri
b220: 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73  es as coroutines
b230: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b240: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
b250: 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72    0x0200   /* Tr
b260: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
b270: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b280: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
b290: 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f  oin   0x0400   /
b2a0: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
b2b0: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
b2c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b2d0: 53 74 61 74 33 20 20 20 20 20 20 20 20 20 20 30  Stat3          0
b2e0: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74  x0800   /* Use t
b2f0: 68 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20  he SQLITE_STAT3 
b300: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
b310: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
b320: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
b330: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
b340: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
b350: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
b360: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
b370: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
b380: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
b390: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  sabled..*/.#ifnd
b3a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
b3b0: 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66  UILTIN_TEST.#def
b3c0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
b3d0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
b3e0: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
b3f0: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
b400: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
b410: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
b420: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
b430: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
b440: 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ask))==0).#else.
b450: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
b460: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
b470: 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e   mask)  0.#defin
b480: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
b490: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
b4a0: 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    1.#endif../*.*
b4b0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
b4c0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
b4d0: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
b4e0: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
b4f0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
b500: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
b510: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
b520: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
b530: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
b540: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
b550: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
b560: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
b570: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
b580: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
b590: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
b5a0: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
b5b0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
b5c0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
b5d0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
b5e0: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
b5f0: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
b600: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
b610: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
b620: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
b630: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
b640: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
b650: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
b660: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
b670: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
b680: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
b690: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
b6a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b6b0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
b6c0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
b6d0: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
b6e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b6f0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
b700: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
b710: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
b720: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
b730: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b740: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
b750: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
b760: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
b770: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
b780: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b790: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
b7a0: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
b7b0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
b7c0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
b7d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
b7e0: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
b7f0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
b800: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b810: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
b820: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
b830: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
b840: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
b850: 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61  lite.aFunc.** ha
b860: 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20  sh table.  When 
b870: 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f  multiple functio
b880: 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ns have the same
b890: 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20   name, the hash 
b8a0: 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20  table.** points 
b8b0: 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  to a linked list
b8c0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
b8d0: 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ures..*/.struct 
b8e0: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20  FuncDef {.  i16 
b8f0: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
b900: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
b910: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
b920: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
b930: 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b    u16 funcFlags;
b940: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
b950: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
b960: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
b970: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
b980: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
b990: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
b9a0: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
b9b0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
b9c0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
b9d0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
b9e0: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
b9f0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
ba00: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
ba10: 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63   /* Regular func
ba20: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
ba30: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
ba40: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
ba50: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
ba60: 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70  * Aggregate step
ba70: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
ba80: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
ba90: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
baa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
bab0: 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72  regate finalizer
bac0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
bad0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
bae0: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
baf0: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e  nction. */.  Fun
bb00: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
bb10: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
bb20: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
bb30: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
bb40: 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72  h */.  FuncDestr
bb50: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
bb60: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
bb70: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
bb80: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
bb90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
bba0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
bbb0: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
bbc0: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
bbd0: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
bbe0: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
bbf0: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
bc00: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
bc10: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
bc20: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
bc30: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
bc40: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
bc50: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
bc60: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
bc70: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
bc80: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
bc90: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
bca0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
bcb0: 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a  Ref is set to .*
bcc0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
bcd0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
bce0: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
bcf0: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
bd00: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
bd10: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
bd20: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
bd30: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
bd40: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
bd50: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
bd60: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
bd70: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
bd80: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
bd90: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
bda0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
bdb0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
bdc0: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
bdd0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
bde0: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
bdf0: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
be00: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
be10: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
be20: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
be30: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
be40: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
be50: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
be60: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
be70: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
be80: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
be90: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
bea0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
beb0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
bec0: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
bed0: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
bee0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
bef0: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
bf00: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
bf10: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
bf20: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
bf30: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
bf40: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
bf50: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
bf60: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68  G_TYPEOFARG.  Th
bf70: 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72  ere.** are asser
bf80: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
bf90: 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65  n the code to ve
bfa0: 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64  rify this..*/.#d
bfb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
bfc0: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33  C_ENCMASK  0x003
bfd0: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
bfe0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
bff0: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
c000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c010: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34  C_LIKE     0x004
c020: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
c030: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
c040: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
c050: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
c060: 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a  ASE     0x008 /*
c070: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
c080: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
c090: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
c0a0: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
c0b0: 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65     0x010 /* Ephe
c0c0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
c0d0: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
c0e0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c0f0: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f  NEEDCOLL 0x020 /
c100: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
c110: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
c120: 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65  be called */.#de
c130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c140: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30 20  _LENGTH   0x040 
c150: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
c160: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
c170: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c180: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
c190: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
c1a0: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
c1b0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c1c0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
c1d0: 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74    0x100 /* Built
c1e0: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
c1f0: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
c200: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
c210: 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20  ALESCE 0x200 /* 
c220: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
c230: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
c240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c250: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
c260: 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x400 /* Built-i
c270: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
c280: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c290: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
c2a0: 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43  STANT 0x800 /* C
c2b0: 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
c2c0: 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
c2d0: 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  utput */../*.** 
c2e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
c2f0: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
c300: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
c310: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
c320: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
c330: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
c340: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
c350: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
c360: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
c370: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c380: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c390: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
c3a0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
c3b0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
c3c0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
c3d0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
c3e0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
c3f0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
c400: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
c410: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
c420: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
c430: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
c440: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
c450: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
c460: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
c470: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
c480: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
c490: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
c4a0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
c4b0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
c4c0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
c4d0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
c4e0: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
c4f0: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
c500: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c510: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c520: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
c530: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
c540: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
c550: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c560: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
c570: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
c580: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c590: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
c5a0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
c5b0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
c5c0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c5d0: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
c5e0: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
c5f0: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
c600: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
c610: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
c620: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
c630: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
c640: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c650: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
c660: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
c670: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
c680: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
c690: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c6a0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
c6b0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c6c0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c6d0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c6e0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c6f0: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
c700: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
c710: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
c720: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
c730: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
c740: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
c750: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
c760: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
c770: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
c780: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
c790: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
c7a0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
c7b0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
c7c0: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
c7d0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
c7e0: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
c7f0: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
c800: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
c810: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
c820: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
c830: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
c840: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
c850: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
c860: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c870: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c880: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c890: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c8a0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c8b0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c8c0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c8d0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c8e0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
c8f0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c900: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
c910: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
c920: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c930: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c940: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c950: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c960: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c970: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c980: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
c990: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c9a0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
c9b0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
c9c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c9d0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c9e0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c9f0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
ca00: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
ca10: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
ca20: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
ca30: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
ca40: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
ca50: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
ca60: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
ca70: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
ca80: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
ca90: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
caa0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
cab0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
cac0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
cad0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
cae0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
caf0: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
cb00: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
cb10: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
cb20: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
cb30: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
cb40: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
cb50: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
cb60: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
cb70: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
cb80: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
cb90: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
cba0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
cbb0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cbc0: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
cbd0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
cbe0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
cbf0: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
cc00: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
cc10: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a  ,#zName,0,0}../*
cc20: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
cc30: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
cc40: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
cc50: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
cc60: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
cc70: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
cc80: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
cc90: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
cca0: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
ccb0: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
ccc0: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
ccd0: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
cce0: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
ccf0: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
cd00: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
cd10: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
cd20: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd40: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
cd50: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
cd60: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
cd70: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
cd80: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
cd90: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cda0: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
cdb0: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
cdc0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
cdd0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
cde0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
cdf0: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
ce00: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
ce10: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
ce20: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
ce30: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
ce40: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
ce50: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
ce60: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
ce70: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
ce80: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
ce90: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
cea0: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
ceb0: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
cec0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
ced0: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
cee0: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
cef0: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
cf00: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
cf10: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
cf20: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
cf30: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
cf40: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
cf50: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
cf60: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
cf70: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
cf80: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
cf90: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
cfa0: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
cfb0: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
cfc0: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
cfd0: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
cfe0: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
cff0: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
d000: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
d010: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
d020: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
d030: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
d040: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
d050: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
d060: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
d070: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d090: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
d0a0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
d0b0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
d0c0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
d0d0: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
d0e0: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
d0f0: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
d100: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
d110: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
d120: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
d130: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
d140: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
d150: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
d160: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
d170: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
d180: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
d190: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
d1a0: 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  mn */.  Expr *pD
d1b0: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
d1c0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
d1d0: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
d1e0: 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f  ar *zDflt;     /
d1f0: 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
d200: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  of the default v
d210: 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  alue */.  char *
d220: 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61  zType;     /* Da
d230: 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73  ta type for this
d240: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
d250: 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
d260: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
d270: 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
d280: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
d290: 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
d2a0: 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
d2b0: 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
d2c0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
d2d0: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
d2e0: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
d2f0: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
d300: 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
d310: 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
d320: 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
d330: 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73  ted size of this
d340: 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31   column.  INT==1
d350: 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
d360: 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
d370: 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
d380: 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
d390: 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
d3a0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
d3b0: 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
d3c0: 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
d3d0: 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
d3e0: 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
d3f0: 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
d400: 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
d410: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
d420: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
d430: 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
d440: 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
d450: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
d460: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
d470: 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
d480: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
d490: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
d4a0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
d4b0: 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
d4c0: 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
d4d0: 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
d4e0: 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
d4f0: 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
d500: 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
d510: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
d520: 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
d530: 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
d540: 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
d550: 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
d560: 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
d570: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
d580: 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
d590: 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
d5a0: 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
d5b0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
d5c0: 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
d5d0: 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
d5e0: 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
d5f0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d600: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
d610: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
d620: 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
d630: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
d640: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
d650: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
d660: 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
d670: 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
d680: 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
d690: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
d6a0: 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
d6b0: 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
d6c0: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
d6d0: 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
d6e0: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
d6f0: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
d700: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
d710: 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
d720: 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
d730: 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
d740: 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
d750: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d760: 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
d770: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
d780: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
d790: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
d7a0: 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
d7b0: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
d7c0: 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   order */../*.**
d7d0: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
d7e0: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
d7f0: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
d800: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
d810: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
d820: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
d830: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
d840: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
d850: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
d860: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
d870: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
d880: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
d890: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
d8a0: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
d8b0: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
d8c0: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
d8d0: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
d8e0: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
d8f0: 20 27 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'a'.  That way,
d900: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
d910: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
d920: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
d930: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
d940: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
d950: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
d960: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
d970: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
d980: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
d990: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
d9a0: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
d9b0: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
d9c0: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
d9d0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
d9e0: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
d9f0: 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  son..*/.#define 
da00: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
da10: 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20      'a'.#define 
da20: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
da30: 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20      'b'.#define 
da40: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
da50: 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20  IC  'c'.#define 
da60: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
da70: 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20  ER  'd'.#define 
da80: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
da90: 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65      'e'..#define
daa0: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
dab0: 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
dac0: 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
dad0: 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
dae0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
daf0: 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
db00: 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
db10: 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
db20: 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
db30: 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  . .*/.#define SQ
db40: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
db50: 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x67../*.** Ad
db60: 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
db70: 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
db80: 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
db90: 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
dba0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
dbb0: 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
dbc0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
dbd0: 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
dbe0: 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
dbf0: 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
dc00: 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
dc10: 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
dc20: 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
dc30: 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
dc40: 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
dc50: 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
dc60: 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
dc70: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
dc80: 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
dc90: 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
dca0: 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
dcb0: 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
dcc0: 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
dcd0: 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a  FNULL   0x08  /*
dce0: 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
dcf0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
dd00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd10: 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
dd20: 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x10  /* Store r
dd30: 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
dd40: 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
dd50: 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
dd60: 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
dd70: 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
dd80: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
dd90: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
dda0: 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73 73 65     0x88  /* Asse
ddb0: 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
ddc0: 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
ddd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
dde0: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
ddf0: 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
de00: 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
de10: 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
de20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
de30: 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hema. .**.** If 
de40: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
de50: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
de60: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
de70: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
de80: 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
de90: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
dea0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
deb0: 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
dec0: 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
ded0: 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
dee0: 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
def0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
df00: 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
df10: 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
df20: 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
df30: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
df40: 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
df50: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
df60: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
df70: 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
df80: 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
df90: 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
dfa0: 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73  ween .** databas
dfb0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
dfc0: 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
dfd0: 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
dfe0: 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  ry database .** 
dff0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
e000: 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
e010: 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
e020: 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
e030: 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
e040: 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
e050: 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
e060: 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
e070: 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
e080: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
e090: 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
e0a0: 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
e0b0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
e0c0: 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
e0d0: 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
e0e0: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
e0f0: 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
e100: 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a  s real tables .*
e110: 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74  * within the dat
e120: 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74  abase. So that t
e130: 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61  hey appear as pa
e140: 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72  rt of the caller
e150: 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  s .** transactio
e160: 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
e170: 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
e180: 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
e190: 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e  atabase .** conn
e1a0: 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
e1b0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
e1c0: 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
e1d0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
e1e0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
e1f0: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
e200: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
e210: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
e220: 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
e230: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
e240: 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
e250: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
e260: 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
e270: 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
e280: 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
e290: 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
e2a0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
e2b0: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
e2c0: 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
e2d0: 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
e2e0: 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
e2f0: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
e300: 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
e310: 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
e320: 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
e330: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
e340: 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
e350: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e360: 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
e370: 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
e380: 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
e390: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e3a0: 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
e3b0: 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
e3c0: 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
e3d0: 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
e3e0: 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
e3f0: 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
e400: 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
e410: 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
e420: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
e430: 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
e440: 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64  ts are not .** d
e450: 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
e460: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e470: 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
e480: 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a  sconnect()ed .**
e490: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
e4a0: 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
e4b0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
e4c0: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
e4d0: 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
e4e0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
e4f0: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
e500: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
e510: 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
e520: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
e530: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
e540: 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
e550: 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
e560: 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  ted .** next tim
e570: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
e580: 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
e590: 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
e5a0: 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
e5b0: 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
e5c0: 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
e5d0: 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
e5e0: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
e5f0: 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
e600: 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
e610: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
e620: 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
e630: 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
e640: 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
e650: 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
e660: 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
e670: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
e680: 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
e690: 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
e6a0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
e6b0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
e6c0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
e6d0: 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
e6e0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
e6f0: 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
e700: 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62  by .** sqlite3Db
e710: 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
e720: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
e730: 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
e740: 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a  VTable.db as .**
e750: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
e760: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
e770: 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
e780: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
e790: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
e7a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
e7b0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
e7c0: 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
e7d0: 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
e7e0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
e7f0: 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
e800: 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
e810: 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
e820: 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
e830: 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
e840: 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
e850: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
e860: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e870: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
e880: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
e890: 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
e8a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
e8b0: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
e8c0: 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
e8d0: 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
e8e0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
e8f0: 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
e900: 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
e910: 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
e920: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
e930: 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
e940: 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
e950: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
e960: 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72  h SQL table is r
e970: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
e980: 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61  mory by an insta
e990: 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f  nce of the.** fo
e9a0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e9b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a  e..**.** Table.z
e9c0: 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  Name is the name
e9d0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
e9e0: 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20  The case of the 
e9f0: 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41  original.** CREA
ea00: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
ea10: 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75  nt is stored, bu
ea20: 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69  t case is not si
ea30: 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a  gnificant for.**
ea40: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a   comparisons..**
ea50: 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69  .** Table.nCol i
ea60: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
ea70: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
ea80: 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43  table.  Table.aC
ea90: 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  ol is a.** point
eaa0: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
eab0: 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75  f Column structu
eac0: 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63  res, one for eac
ead0: 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20  h column..**.** 
eae0: 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  If the table has
eaf0: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
eb00: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61  ARY KEY, then Ta
eb10: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65  ble.iPKey is the
eb20: 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65   index of.** the
eb30: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
eb40: 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65  that key.   Othe
eb50: 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65  rwise Table.iPKe
eb60: 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20  y is negative.  
eb70: 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  Note.** that the
eb80: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
eb90: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73   PRIMARY KEY mus
eba0: 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72  t be INTEGER for
ebb0: 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a   this field to.*
ebc0: 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e  * be set.  An IN
ebd0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
ebe0: 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  Y is used as the
ebf0: 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20   rowid for each 
ec00: 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61  row of.** the ta
ec10: 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65  ble.  If a table
ec20: 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20   has no INTEGER 
ec30: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
ec40: 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  n a random rowid
ec50: 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64  .** is generated
ec60: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
ec70: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f   the table.  TF_
ec80: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73  HasPrimaryKey is
ec90: 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74   set if.** the t
eca0: 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49  able has any PRI
ecb0: 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45  MARY KEY, INTEGE
ecc0: 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a  R or otherwise..
ecd0: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d  **.** Table.tnum
ece0: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
ecf0: 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74  ber for the root
ed00: 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74   BTree page of t
ed10: 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a  he table in the.
ed20: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
ed30: 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20  .  If Table.iDb 
ed40: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
ed50: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
ed60: 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e  le backend.** in
ed70: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20   sqlite.aDb[].  
ed80: 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69  0 is for the mai
ed90: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31  n database and 1
eda0: 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65   is for the file
edb0: 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74   that.** holds t
edc0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
edd0: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66  and indices.  If
ede0: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73   TF_Ephemeral is
edf0: 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65   set.** then the
ee00: 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64   table is stored
ee10: 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20   in a file that 
ee20: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
ee30: 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e   deleted.** when
ee40: 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   the VDBE cursor
ee50: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73   to the table is
ee60: 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69   closed.  In thi
ee70: 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75  s case Table.tnu
ee80: 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42  m .** refers VDB
ee90: 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
eea0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74  that holds the t
eeb0: 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74  able open, not t
eec0: 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  o the root.** pa
eed0: 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e  ge number.  Tran
eee0: 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65  sient tables are
eef0: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68   used to hold th
ef00: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a  e results of a.*
ef10: 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74  * sub-query that
ef20: 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64   appears instead
ef30: 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
ef40: 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f   name in the FRO
ef50: 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20  M clause .** of 
ef60: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
ef70: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  nt..*/.struct Ta
ef80: 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
ef90: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
efa0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
efb0: 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
efc0: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
efd0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
efe0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
eff0: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
f000: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
f010: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
f020: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
f030: 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
f040: 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
f050: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
f060: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
f070: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
f080: 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
f090: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
f0a0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
f0b0: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
f0c0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
f0d0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
f0e0: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
f0f0: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
f100: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
f110: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
f120: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
f130: 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20  HECK.  ExprList 
f140: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
f150: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
f160: 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ints */.#endif. 
f170: 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45   LogEst nRowLogE
f180: 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  st;   /* Estimat
f190: 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65  ed rows in table
f1a0: 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73   - from sqlite_s
f1b0: 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20  tat1 table */.  
f1c0: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
f1d0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
f1e0: 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73  ee node for this
f1f0: 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65   table (see note
f200: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36   above) */.  i16
f210: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
f220: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
f230: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
f240: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69  PKey] as the pri
f250: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31  mary key */.  i1
f260: 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
f270: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f280: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
f290: 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
f2a0: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
f2b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
f2c0: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
f2d0: 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
f2e0: 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
f2f0: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
f300: 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
f310: 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
f320: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
f330: 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
f340: 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
f350: 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
f360: 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
f370: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
f380: 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61  ndif.  u8 tabFla
f390: 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  gs;         /* M
f3a0: 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
f3b0: 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f  es */.  u8 keyCo
f3c0: 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
f3d0: 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
f3e0: 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
f3f0: 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
f400: 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
f410: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
f420: 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
f430: 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
f440: 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
f450: 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
f460: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
f470: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
f480: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
f490: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
f4a0: 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
f4b0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
f4c0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
f4d0: 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
f4e0: 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
f4f0: 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d  /* Text of all m
f500: 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20  odule args. [0] 
f510: 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a  is module name *
f520: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
f530: 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
f540: 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
f550: 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
f560: 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
f570: 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
f580: 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
f590: 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
f5a0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
f5b0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
f5c0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
f5d0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
f5e0: 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
f5f0: 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
f600: 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
f610: 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
f620: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
f630: 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
f640: 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flags..*/.#defin
f650: 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
f660: 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
f670: 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
f680: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
f690: 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
f6a0: 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
f6b0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
f6c0: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
f6d0: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
f6e0: 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
f6f0: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
f700: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
f710: 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
f720: 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
f730: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
f740: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
f750: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
f760: 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
f770: 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
f780: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
f790: 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
f7a0: 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30  outRowid    0x20
f7b0: 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20      /* No rowid 
f7c0: 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b 45  used. PRIMARY KE
f7d0: 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a  Y is the key */.
f7e0: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
f7f0: 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
f800: 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
f810: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
f820: 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
f830: 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
f840: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
f850: 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
f860: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
f870: 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
f880: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
f890: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
f8a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
f8b0: 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
f8c0: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
f8d0: 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
f8e0: 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61  lags & TF_Virtua
f8f0: 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  l)!=0).#  define
f900: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
f910: 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61  X) (((X)->colFla
f920: 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
f930: 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23  DEN)!=0).#else.#
f940: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
f950: 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20  al(X)      0.#  
f960: 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
f970: 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
f980: 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  f../* Does the t
f990: 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
f9a0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
f9b0: 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
f9c0: 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
f9d0: 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
f9e0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
f9f0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
fa00: 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
fa10: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
fa20: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
fa30: 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
fa40: 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
fa50: 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
fa60: 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
fa70: 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
fa80: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
fa90: 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
faa0: 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
fab0: 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
fac0: 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
fad0: 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
fae0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
faf0: 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
fb00: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
fb10: 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
fb20: 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
fb30: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
fb40: 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
fb50: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
fb60: 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
fb70: 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
fb80: 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
fb90: 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
fba0: 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
fbb0: 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
fbc0: 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
fbd0: 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
fbe0: 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
fbf0: 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
fc00: 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
fc10: 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
fc20: 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
fc30: 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
fc40: 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
fc50: 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
fc60: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
fc70: 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
fc80: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
fc90: 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
fca0: 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
fcb0: 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
fcc0: 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
fcd0: 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
fce0: 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
fcf0: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
fd00: 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
fd10: 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
fd20: 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
fd30: 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
fd40: 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
fd50: 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
fd60: 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
fd70: 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
fd80: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
fd90: 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
fda0: 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
fdb0: 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
fdc0: 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
fdd0: 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
fde0: 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
fdf0: 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
fe00: 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
fe10: 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
fe20: 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
fe30: 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
fe40: 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
fe50: 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
fe60: 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
fe70: 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
fe80: 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
fe90: 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
fea0: 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
feb0: 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
fec0: 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
fed0: 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
fee0: 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
fef0: 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
ff00: 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
ff10: 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
ff20: 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
ff30: 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
ff40: 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
ff50: 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
ff60: 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
ff70: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
ff80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ff90: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
ffa0: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
ffb0: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
ffc0: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
ffd0: 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
ffe0: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
fff0: 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
10000 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
10010 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
10020 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
10030 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
10040 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
10050 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
10060 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
10070 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
10080 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
10090 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
100a0 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
100b0 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
100c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
100d0 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
100e0 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
100f0 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
10100 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
10110 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
10120 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
10130 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
10140 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
10150 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
10160 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
10170 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
10180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
10190 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
101a0 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
101b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
101c0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
101d0 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
101e0 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
101f0 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
10200 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
10210 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
10220 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
10230 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
10240 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
10250 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
10260 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
10270 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
10280 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
10290 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
102a0 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
102b0 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
102c0 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
102d0 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
102e0 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
102f0 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
10300 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
10310 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
10320 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
10330 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
10340 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
10350 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
10360 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10370 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
10380 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
10390 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
103a0 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
103b0 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
103c0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
103d0 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
103e0 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
103f0 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
10400 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
10410 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
10420 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
10430 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
10440 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
10450 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
10460 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
10470 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
10480 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
10490 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
104a0 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
104b0 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
104c0 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
104d0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
104e0 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
104f0 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
10500 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
10510 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
10520 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
10530 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
10540 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
10550 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
10560 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
10570 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
10580 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
10590 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
105a0 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
105b0 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
105c0 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
105d0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
105e0 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
105f0 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
10600 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
10610 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
10620 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
10630 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
10640 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
10650 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
10660 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
10670 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
10680 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
10690 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
106a0 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
106b0 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
106c0 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f  y..** .** The fo
106d0 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
106e0 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
106f0 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
10700 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
10710 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
10720 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
10730 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
10740 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
10750 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
10760 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
10770 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
10780 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
10790 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
107a0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
107b0 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
107c0 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
107d0 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
107e0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
107f0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10800 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
10810 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
10820 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
10830 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
10840 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
10850 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
10860 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
10870 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
10880 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
10890 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
108a0 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
108b0 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
108c0 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
108d0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
108e0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
108f0 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
10900 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
10910 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
10920 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
10930 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
10940 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
10950 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
10960 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
10970 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
10980 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
10990 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
109a0 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
109b0 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
109c0 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
109d0 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
109e0 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
109f0 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
10a00 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
10a10 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
10a20 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
10a30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
10a40 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10a50 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
10a60 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
10a70 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
10a80 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
10a90 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
10aa0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
10ab0 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73  the .** comparis
10ac0 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
10ad0 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
10ae0 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
10af0 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
10b00 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
10b10 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
10b20 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
10b30 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
10b40 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
10b50 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
10b60 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
10b70 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
10b80 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
10b90 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
10ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10bb0 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
10bc0 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
10bd0 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
10be0 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
10bf0 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
10c00 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
10c10 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
10c20 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
10c30 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
10c40 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
10c50 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
10c60 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
10c70 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
10c80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10c90 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
10ca0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
10cb0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
10cc0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
10cd0 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
10ce0 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
10cf0 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
10d00 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
10d10 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
10d20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
10d30 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10d40 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
10d50 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
10d60 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
10d70 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10d80 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
10d90 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
10da0 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67   about a.** sing
10db0 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20  le index record 
10dc0 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
10dd0 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
10de0 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
10df0 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  .** values..**.*
10e00 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
10e10 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
10e20 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
10e30 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
10e40 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
10e50 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
10e60 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
10e70 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
10e80 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
10e90 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
10ea0 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
10eb0 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
10ec0 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
10ed0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
10ee0 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
10ef0 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
10f00 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
10f10 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
10f20 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
10f30 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72  ucture holds a r
10f40 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
10f50 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61  lready been disa
10f60 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f  ssembled.** into
10f70 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74   its constituent
10f80 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54   fields..**.** T
10f90 68 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65 6d  he r1 and r2 mem
10fa0 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 61 72  ber variables ar
10fb0 65 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 74  e only used by t
10fc0 68 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d  he optimized com
10fd0 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74  parison.** funct
10fe0 69 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64 43  ions vdbeRecordC
10ff0 6f 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64 20  ompareInt() and 
11000 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72  vdbeRecordCompar
11010 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74  eString()..*/.st
11020 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
11030 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
11040 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
11050 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
11060 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
11070 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ion */.  u16 nFi
11080 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
11090 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
110a0 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
110b0 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
110c0 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
110d0 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
110e0 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
110f0 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20    u8 errCode;   
11100 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64        /* Error d
11110 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f  etected by xReco
11120 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55  rdCompare (CORRU
11130 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a  PT or NOMEM) */.
11140 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
11150 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
11160 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20  */.  int r1;    
11170 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
11180 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
11190 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20  lhs > rhs) */.  
111a0 69 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20 20  int r2;         
111b0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
111c0 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c  return if (rhs <
111d0 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   lhs) */.};.../*
111e0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
111f0 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
11200 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
11210 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
11220 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11230 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
11240 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
11250 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
11260 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
11270 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
11280 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
11290 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
112a0 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
112b0 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
112c0 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
112d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
112e0 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
112f0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
11300 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
11310 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
11320 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
11330 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
11340 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
11350 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
11360 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
11370 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
11380 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
11390 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
113a0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
113b0 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
113c0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
113d0 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
113e0 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
113f0 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
11400 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
11410 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
11420 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
11430 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
11440 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
11450 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d   .** first colum
11460 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
11470 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
11480 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
11490 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
114a0 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
114b0 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
114c0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
114d0 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
114e0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
114f0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
11500 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
11510 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
11520 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
11530 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
11540 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
11550 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
11560 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
11570 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
11580 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
11590 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
115a0 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
115b0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
115c0 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
115d0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
115e0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
115f0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
11600 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
11610 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
11620 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f  olution .** algo
11630 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
11640 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
11650 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
11660 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
11670 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
11680 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b  /.struct Index {
11690 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
116a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
116b0 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65  ame of this inde
116c0 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f  x */.  i16 *aiCo
116d0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
116e0 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
116f0 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
11700 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
11710 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a   0 */.  LogEst *
11720 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20  aiRowLogEst;    
11730 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45   /* From ANALYZE
11740 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65  : Est. rows sele
11750 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c  cted by each col
11760 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  umn */.  Table *
11770 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  pTable;         
11780 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
11790 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
117a0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
117b0 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Aff;           /
117c0 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
117d0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
117e0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
117f0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
11800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11810 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
11820 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
11830 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
11840 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
11850 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  a;         /* Sc
11860 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
11870 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
11880 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
11890 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20           /* for 
118a0 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75  each column: Tru
118b0 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d  e==DESC, False==
118c0 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ASC */.  char **
118d0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  azColl;         
118e0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
118f0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
11900 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
11910 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72   */.  Expr *pPar
11920 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f  tIdxWhere;     /
11930 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
11940 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63  or partial indic
11950 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20  es */.  KeyInfo 
11960 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20 20  *pKeyInfo;      
11970 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62   /* A KeyInfo ob
11980 6a 65 63 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ject suitable fo
11990 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
119a0 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
119b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
119c0 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
119d0 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
119e0 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
119f0 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
11a00 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
11a10 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
11a20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
11a30 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
11a40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11a50 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
11a60 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
11a70 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
11a80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11a90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
11aa0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
11ab0 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
11ac0 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
11ad0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
11ae0 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
11af0 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
11b00 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
11b10 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
11b20 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
11b30 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
11b40 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
11b50 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
11b60 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
11b70 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
11b80 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
11b90 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
11ba0 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
11bb0 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
11bc0 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
11bd0 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
11be0 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ns */.  unsigned
11bf0 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20   isResized:1;   
11c00 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69   /* True if resi
11c10 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20  zeIndexObject() 
11c20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
11c30 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
11c40 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a  Covering:1;   /*
11c50 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73   True if this is
11c60 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65   a covering inde
11c70 78 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  x */.#ifdef SQLI
11c80 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
11c90 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
11ca0 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
11cb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11cc0 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
11cd0 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
11ce0 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
11cf0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
11d00 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
11d10 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
11d20 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
11d30 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
11d40 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
11d50 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
11d60 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
11d70 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
11d80 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
11d90 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
11da0 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66  st key */.#endif
11db0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
11dc0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
11dd0 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
11de0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
11df0 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
11e00 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
11e10 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
11e20 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
11e30 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
11e40 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
11e50 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
11e60 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
11e70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11e80 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
11e90 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
11ea0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
11eb0 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
11ec0 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
11ed0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
11ee0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
11ef0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
11f00 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
11f10 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
11f20 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
11f30 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
11f40 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
11f50 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
11f60 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
11f70 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
11f80 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
11f90 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
11fa0 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  ne)../*.** Each 
11fb0 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
11fc0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11fd0 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
11fe0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
11ff0 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72   .** using a str
12000 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
12010 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
12020 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
12030 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
12040 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
12050 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
12060 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
12070 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
12080 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
12090 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
120a0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
120b0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
120c0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
120d0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
120e0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
120f0 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
12100 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
12110 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
12120 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
12130 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
12140 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
12150 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
12160 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
12170 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
12180 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
12190 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
121a0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
121b0 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
121c0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
121d0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
121e0 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
121f0 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
12200 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
12210 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
12220 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
12230 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
12240 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
12250 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
12260 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
12270 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
12280 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
12290 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
122a0 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
122b0 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
122c0 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
122d0 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
122e0 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
122f0 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
12300 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
12310 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
12320 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
12330 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
12340 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
12350 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
12360 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
12370 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
12380 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
12390 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
123a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
123b0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
123c0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
123d0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
123e0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
123f0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
12400 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
12410 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
12420 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
12430 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
12440 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
12450 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
12460 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
12470 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
12480 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
12490 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
124a0 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
124b0 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
124c0 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
124d0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
124e0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
124f0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
12500 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
12510 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
12520 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
12530 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
12540 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
12550 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
12560 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
12570 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
12580 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
12590 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
125a0 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
125b0 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
125c0 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
125d0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
125e0 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
125f0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
12600 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
12610 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
12620 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
12630 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
12640 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
12650 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
12680 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
12690 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
126a0 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
126b0 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
126c0 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
126d0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
126e0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
126f0 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
12720 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
12730 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
12740 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
12750 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
12760 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
12770 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
12780 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
12790 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
127a0 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
127b0 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
127c0 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
127d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
127e0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
127f0 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
12800 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
12810 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
12820 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
12830 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
12840 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
12850 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
12860 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
12870 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
12880 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
12890 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
128a0 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
128b0 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
128c0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
128d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
128e0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
128f0 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
12900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
12910 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
12920 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
12930 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
12940 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
12950 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
12960 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
12970 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
12980 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
12990 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
129a0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
129b0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
129c0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
129f0 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
12a00 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
12a10 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
12a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
12a30 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
12a40 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
12a50 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
12a60 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
12a70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
12a80 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
12a90 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
12aa0 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
12ab0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
12ac0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
12ad0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
12ae0 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
12b10 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
12b20 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
12b30 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12b50 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
12b60 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
12b70 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
12b80 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
12b90 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12ba0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
12bb0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
12bc0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
12bd0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
12be0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
12bf0 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
12c00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
12c10 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
12c20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
12c30 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12c50 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
12c60 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
12c70 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
12c80 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
12c90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
12ca0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
12cb0 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
12cc0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
12cd0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
12ce0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
12cf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
12d00 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
12d10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
12d20 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
12d30 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
12d40 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
12d50 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
12d60 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
12d70 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
12d80 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
12d90 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
12da0 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
12db0 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
12dc0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
12dd0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
12de0 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
12df0 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
12e00 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
12e10 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
12e20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
12e30 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
12e40 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
12e50 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
12e60 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
12e70 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
12e80 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
12e90 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
12ea0 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
12eb0 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
12ec0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
12ed0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
12ee0 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
12ef0 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
12f00 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
12f10 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
12f20 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
12f30 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
12f40 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
12f50 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
12f60 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
12f70 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
12f80 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
12f90 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
12fa0 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
12fb0 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
12fc0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
12fd0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
12fe0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
12ff0 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
13000 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
13010 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
13020 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
13030 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
13040 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
13050 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
13060 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
13070 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
13080 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
13090 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
130a0 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
130b0 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
130c0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
130d0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
130e0 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
130f0 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
13100 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
13110 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
13120 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13130 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
13140 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
13150 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
13160 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
13170 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
13180 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
13190 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
131a0 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
131b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
131c0 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
131d0 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
131e0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
131f0 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
13200 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
13210 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
13220 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
13230 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
13240 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
13250 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
13260 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
13270 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
13280 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
13290 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
132a0 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
132b0 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
132c0 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
132d0 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
132e0 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
132f0 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
13300 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
13310 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
13320 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
13330 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
13340 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
13350 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
13360 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
13370 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
13380 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
13390 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
133a0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
133b0 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
133c0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
133d0 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
133e0 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
133f0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
13400 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
13410 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
13420 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
13430 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
13440 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
13450 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
13460 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
13470 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
13480 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
13490 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
134a0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
134b0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
134c0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
134d0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
134e0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
134f0 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
13500 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
13510 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
13520 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
13530 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13540 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
13550 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
13560 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
13570 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
13580 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
13590 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
135a0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
135b0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
135c0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
135d0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
135e0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
135f0 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
13600 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
13610 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
13620 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
13630 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
13640 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
13650 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
13660 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
13670 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
13680 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13690 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
136a0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
136b0 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
136c0 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
136d0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
136e0 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
136f0 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
13700 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
13710 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
13720 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
13730 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
13740 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
13750 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
13760 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
13770 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
13780 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13790 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
137a0 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
137b0 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
137c0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
137d0 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
137e0 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
137f0 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
13800 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
13810 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
13820 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
13830 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
13840 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
13850 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
13860 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
13870 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
13880 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
13890 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
138a0 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
138b0 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
138c0 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
138d0 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
138e0 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
138f0 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
13900 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
13910 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
13920 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
13930 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
13940 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
13950 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
13960 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
13970 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
13980 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
13990 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
139a0 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
139b0 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
139c0 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
139d0 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
139e0 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
139f0 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
13a00 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
13a10 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
13a20 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
13a30 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
13a40 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
13a50 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
13a60 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
13a70 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
13a80 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
13a90 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
13aa0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
13ab0 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
13ac0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
13ad0 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
13ae0 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
13af0 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
13b00 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
13b10 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
13b20 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
13b30 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
13b40 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
13b50 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
13b60 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
13b70 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
13b80 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
13b90 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
13ba0 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
13bb0 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
13bc0 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
13bd0 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
13be0 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
13bf0 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
13c00 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
13c10 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
13c20 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
13c30 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
13c40 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13c60 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
13c70 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
13c80 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
13c90 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
13ca0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
13cb0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
13cc0 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
13cd0 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
13ce0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13cf0 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
13d00 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
13d10 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
13d20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
13d30 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
13d40 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
13d50 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
13d60 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
13d70 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
13d80 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
13d90 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
13da0 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
13db0 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
13dc0 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
13dd0 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
13de0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
13df0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
13e00 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
13e10 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
13e20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
13e30 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
13e40 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
13e50 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
13e60 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
13e70 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
13e80 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  . .  ***********
13e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
13ed0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
13ee0 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
13ef0 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
13f00 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
13f10 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
13f20 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
13f30 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
13f40 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
13f50 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
13f60 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
13f70 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
13f80 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
13f90 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
13fa0 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
13fb0 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
13fc0 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
13fd0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
13fe0 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
13ff0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
14000 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14010 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
14020 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
14030 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
14040 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
14050 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
14060 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
14070 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
14080 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
14090 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
140a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
140b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
140c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
140d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
140e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
140f0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
14100 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
14110 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
14120 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
14130 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
14140 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
14150 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
14160 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
14170 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
14180 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
14190 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
141b0 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
141c0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
141f0 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
14200 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
14230 3a 20 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69  :  1000 times li
14240 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e  kelihood */.  yn
14250 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
14260 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
14270 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
14280 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
142b0 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
142c0 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
142d0 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36   >= 1). */.  i16
142e0 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
142f0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
14300 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
14310 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
14320 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
14330 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
14340 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
14350 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
14360 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
14370 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
14380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
14390 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
143a0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
143b0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
143d0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
143e0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
143f0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
14420 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
14430 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
14440 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
14450 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
14460 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
14470 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
14480 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
14490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
144a0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
144b0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
144c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
144d0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
144e0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
144f0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
14500 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
14510 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
14520 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f  n  0x000001 /* O
14530 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
14540 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
14550 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
14560 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
14570 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
14580 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
14590 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
145a0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
145b0 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30  e EP_Resolved  0
145c0 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68  x000004 /* IDs h
145d0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
145e0 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
145f0 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
14600 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a       0x000008 /*
14610 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
14620 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
14630 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
14640 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
14650 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
14660 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
14670 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
14680 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
14690 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
146a0 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
146b0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
146c0 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
146d0 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
146e0 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
146f0 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
14700 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
14710 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
14720 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
14730 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
14740 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
14750 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
14760 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
14770 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
14780 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
14790 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
147a0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
147b0 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
147c0 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
147d0 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
147e0 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
147f0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
14800 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
14810 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
14820 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
14830 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
14840 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
14850 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
14860 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
14870 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
14880 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
14890 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
148a0 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
148b0 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
148c0 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
148d0 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
148e0 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
148f0 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
14900 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
14910 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
14920 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
14930 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
14940 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
14950 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
14960 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
14970 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
14980 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
14990 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
149a0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
149b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
149c0 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
149d0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
149e0 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
149f0 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
14a00 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
14a10 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
14a20 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
14a30 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
14a40 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
14a50 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
14a60 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
14a70 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
14a80 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
14a90 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38  P_Constant  0x08
14aa0 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20  0000 /* Node is 
14ab0 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f  a constant */../
14ac0 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
14ad0 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
14ae0 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
14af0 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
14b00 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
14b10 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
14b20 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
14b30 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
14b40 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
14b50 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
14b60 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
14b70 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
14b80 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
14b90 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
14ba0 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
14bb0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
14bc0 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
14bd0 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
14be0 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
14bf0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
14c00 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
14c10 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
14c20 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
14c30 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
14c40 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
14c50 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
14c60 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
14c70 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
14c80 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
14c90 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
14ca0 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
14cb0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
14cc0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
14cd0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
14ce0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
14cf0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
14d00 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
14d10 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
14d20 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
14d30 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
14d40 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
14d50 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
14d60 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
14d70 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
14d80 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
14d90 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
14da0 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
14db0 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
14dc0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
14dd0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
14de0 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
14df0 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
14e00 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
14e10 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
14e20 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
14e30 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
14e40 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
14e50 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
14e60 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
14e70 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
14e80 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
14e90 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
14ea0 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
14eb0 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
14ec0 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
14ed0 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
14ee0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
14ef0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
14f00 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
14f10 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
14f20 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
14f30 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
14f40 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
14f50 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
14f60 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
14f70 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
14f80 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
14f90 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
14fa0 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
14fb0 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
14fc0 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
14fd0 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
14fe0 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
14ff0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
15000 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
15010 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
15020 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
15030 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
15040 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
15050 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
15060 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
15070 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
15080 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
15090 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
150a0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
150b0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
150c0 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
150d0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
150e0 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
150f0 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
15100 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
15110 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
15120 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
15130 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
15140 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
15150 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
15160 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
15170 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
15180 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
15190 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
151a0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
151b0 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
151c0 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
151d0 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
151e0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
151f0 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
15200 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
15210 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
15220 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
15230 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
15240 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
15250 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
15260 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
15270 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
15280 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
15290 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
152a0 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
152b0 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
152c0 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
152d0 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
152e0 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
152f0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
15300 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
15310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15320 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
15330 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
15340 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
15350 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
15360 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
15370 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
15380 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
15390 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
153a0 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
153b0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
153c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
153d0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
153e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
153f0 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
15400 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
15410 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
15420 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
15430 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
15440 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
15450 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
15460 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
15470 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
15480 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
15490 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
154a0 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
154b0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
154c0 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
154d0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
154e0 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
154f0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
15500 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
15510 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
15520 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
15530 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
15540 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
15550 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
15560 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
15570 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
15580 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
15590 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
155a0 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
155b0 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
155c0 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
155d0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
155e0 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
155f0 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
15600 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
15610 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
15620 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
15630 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
15640 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
15650 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
15660 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
15670 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
15680 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
15690 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
156a0 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
156b0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
156c0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
156d0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
156e0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
156f0 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
15700 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
15710 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
15720 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
15730 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
15740 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
15750 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
15760 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
15770 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
15780 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
15790 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
157a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
157b0 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
157c0 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
157d0 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
157e0 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
157f0 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
15800 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
15810 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
15820 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
15830 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
15840 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
15850 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
15860 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
15870 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
15880 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
15890 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
158a0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
158b0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
158c0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
158d0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
158e0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
158f0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
15900 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
15910 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
15920 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
15930 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
15940 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
15950 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
15960 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
15970 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
15980 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
15990 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
159a0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
159b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
159c0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
159d0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
159e0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
159f0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
15a00 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
15a10 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
15a20 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
15a30 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
15a40 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
15a50 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
15a60 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
15a70 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
15a80 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
15a90 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
15aa0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
15ab0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
15ac0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
15ad0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
15ae0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
15af0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
15b00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
15b10 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
15b20 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
15b30 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
15b40 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
15b50 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
15b60 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
15b70 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
15b80 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
15b90 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
15ba0 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
15bb0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
15bc0 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
15bd0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
15be0 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
15bf0 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
15c00 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
15c10 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
15c20 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
15c30 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
15c40 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
15c50 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
15c60 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
15c70 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
15c80 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
15c90 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
15ca0 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
15cb0 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
15cc0 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
15cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
15ce0 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
15cf0 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
15d00 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
15d10 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
15d20 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a  )1)<<(n))../*.**
15d30 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
15d40 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
15d50 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
15d60 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
15d70 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
15d80 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
15d90 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
15da0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
15db0 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
15dc0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
15dd0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
15de0 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
15df0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
15e00 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
15e10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
15e20 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
15e30 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
15e40 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
15e50 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
15e60 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
15e70 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
15e80 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
15e90 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
15ea0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
15eb0 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
15ec0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
15ed0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
15ee0 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
15ef0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
15f00 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
15f10 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
15f20 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
15f30 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
15f40 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
15f50 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
15f60 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
15f70 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
15f80 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
15f90 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
15fa0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
15fb0 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
15fc0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
15fd0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
15fe0 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
15ff0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
16000 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
16010 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
16020 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
16030 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
16040 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
16050 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
16060 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
16070 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
16080 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
16090 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
160a0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
160b0 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
160c0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
160d0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
160e0 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
160f0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
16100 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
16110 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
16120 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
16130 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
16140 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
16150 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
16160 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
16170 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
16180 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16190 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
161a0 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
161b0 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
161c0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
161d0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
161e0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
161f0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
16200 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
16210 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
16220 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
16230 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
16240 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
16250 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
16260 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
16270 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
16280 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
16290 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
162a0 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
162b0 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
162c0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
162d0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
162e0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
162f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
16300 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
16310 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
16320 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
16330 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
16340 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
16350 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
16360 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
16370 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
16380 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
16390 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
163a0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
163b0 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
163c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
163d0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
163e0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
163f0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
16400 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
16410 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
16420 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
16430 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
16440 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
16450 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
16460 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
16470 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
16480 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
16490 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
164a0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
164b0 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
164c0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73  lause */.    uns
164d0 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
164e0 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
164f0 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
16500 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
16510 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
16520 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
16530 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
16540 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
16550 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
16560 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
16570 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
16580 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
16590 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66   WITH */.#ifndef
165a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
165b0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
165c0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
165d0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
165e0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
165f0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
16600 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
16610 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
16620 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
16630 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
16640 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
16650 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
16660 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
16670 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
16680 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
16690 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
166a0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
166b0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
166c0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
166d0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
166e0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
166f0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
16700 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
16710 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
16720 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
16730 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
16740 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
16750 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
16760 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
16770 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
16780 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
16790 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
167a0 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
167b0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
167c0 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
167d0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
167e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
167f0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
16800 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
16810 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
16820 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
16830 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
16840 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
16850 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
16860 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16870 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
16880 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
16890 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
168a0 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
168b0 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
168c0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
168d0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
168e0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
168f0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
16900 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
16910 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
16920 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
16930 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
16940 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
16950 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
16960 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
16970 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
16980 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
16990 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
169a0 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
169b0 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
169c0 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
169d0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
169e0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
169f0 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
16a00 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
16a10 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
16a20 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
16a30 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
16a40 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
16a50 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
16a60 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
16a70 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
16a80 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
16a90 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
16aa0 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
16ab0 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
16ac0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
16ad0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
16ae0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
16af0 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
16b00 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
16b10 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
16b20 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
16b30 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
16b40 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
16b50 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
16b60 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
16b70 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
16b80 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
16b90 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
16ba0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
16bb0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
16bc0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
16bd0 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
16be0 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
16bf0 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
16c00 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
16c10 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
16c20 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
16c30 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
16c40 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
16c50 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
16c60 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
16c70 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
16c80 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
16c90 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
16ca0 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
16cb0 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
16cc0 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
16cd0 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
16ce0 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
16cf0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
16d00 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
16d10 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
16d20 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
16d30 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
16d40 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16d50 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
16d60 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
16d70 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
16d80 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
16d90 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16da0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
16db0 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
16dc0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
16dd0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
16de0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
16df0 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
16e00 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
16e10 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
16e20 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
16e30 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
16e40 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
16e50 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
16e60 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f  _ReopenIdx */../
16e70 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
16e80 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
16e90 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
16ea0 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
16eb0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
16ec0 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
16ed0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
16ee0 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
16ef0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
16f00 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
16f10 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
16f20 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
16f30 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
16f40 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
16f50 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
16f60 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
16f70 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
16f80 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
16f90 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
16fa0 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
16fb0 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
16fc0 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
16fd0 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
16fe0 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
16ff0 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
17000 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
17010 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
17020 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
17030 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
17040 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
17050 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
17060 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
17070 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
17080 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
17090 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
170a0 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
170b0 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
170c0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
170d0 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
170e0 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
170f0 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
17100 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
17110 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
17120 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
17130 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
17140 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
17150 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
17160 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
17170 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
17180 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
17190 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
171a0 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
171b0 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74  er-most .** cont
171c0 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
171d0 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
171e0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
171f0 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
17200 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
17210 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
17220 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
17230 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
17240 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
17250 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
17260 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
17270 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
17280 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
17290 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
172a0 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
172b0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
172c0 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
172d0 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
172e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
172f0 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
17300 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ed. .**.** Each 
17310 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
17320 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
17330 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
17340 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
17350 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
17360 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
17370 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
17380 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
17390 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
173a0 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
173b0 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
173c0 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
173d0 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
173e0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
173f0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
17400 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
17410 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
17420 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
17430 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
17440 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
17450 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
17460 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
17470 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
17480 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
17490 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
174a0 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
174b0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
174c0 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
174d0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
174e0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
174f0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
17500 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
17510 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
17520 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
17530 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
17540 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
17550 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
17560 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
17570 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
17580 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
17590 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
175a0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
175b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
175c0 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
175d0 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
175e0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
175f0 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20    u8 ncFlags;   
17600 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
17610 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
17620 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
17630 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
17640 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
17650 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
17660 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
17670 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
17680 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20  lowAgg  0x01    
17690 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
176a0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
176b0 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
176c0 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
176d0 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f  0x02    /* One o
176e0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
176f0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
17700 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
17710 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20  Check   0x04    
17720 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
17730 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
17740 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
17750 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
17760 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20  nAggFunc 0x08   
17770 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
17780 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
17790 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
177a0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
177b0 74 49 64 78 20 20 20 30 78 31 30 20 20 20 20 2f  tIdx   0x10    /
177c0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
177d0 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
177e0 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a  dex WHERE */../*
177f0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
17800 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17810 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
17820 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
17830 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
17840 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
17850 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
17860 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
17870 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
17880 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
17890 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
178a0 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
178b0 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
178c0 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
178d0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
178e0 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
178f0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
17900 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
17910 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
17920 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
17930 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
17940 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
17950 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
17960 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
17970 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
17980 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
17990 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
179a0 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
179b0 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
179c0 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
179d0 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
179e0 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
179f0 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
17a00 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
17a10 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
17a20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
17a30 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
17a40 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
17a50 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
17a60 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
17a70 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
17a80 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
17a90 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
17aa0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
17ab0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
17ac0 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
17ad0 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
17ae0 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
17af0 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
17b00 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
17b10 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
17b20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
17b30 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
17b40 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
17b50 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
17b60 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
17b70 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
17b80 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
17b90 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
17ba0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
17bb0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
17bc0 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
17bd0 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
17be0 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
17bf0 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
17c00 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
17c10 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
17c20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
17c30 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
17c40 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
17c50 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
17c60 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
17c90 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
17ca0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
17cb0 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
17cc0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
17cd0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
17ce0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
17cf0 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
17d00 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
17d10 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
17d20 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
17d30 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61  nters */.  int a
17d40 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
17d50 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
17d60 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
17d70 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
17d80 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63   */.  u64 nSelec
17d90 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20  tRow;        /* 
17da0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
17db0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
17dc0 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
17dd0 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
17de0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
17df0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
17e00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
17e10 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
17e20 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
17e30 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
17e40 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
17e50 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
17e60 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
17e70 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
17e80 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
17e90 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
17ea0 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
17eb0 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
17ec0 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
17ed0 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
17ee0 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
17ef0 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
17f00 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
17f10 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
17f20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
17f30 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
17f40 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
17f50 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
17f60 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
17f70 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
17f80 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
17f90 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
17fa0 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
17fb0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
17fc0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
17fd0 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
17fe0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
17ff0 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
18000 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
18010 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
18020 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
18030 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
18040 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
18050 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
18060 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
18070 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
18080 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
18090 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
180a0 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
180b0 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
180c0 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
180d0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
180e0 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74  0x0002  /* Ident
180f0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
18100 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
18110 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
18120 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20  e       0x0004  
18130 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
18140 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18150 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
18160 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
18170 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68  0008  /* Uses th
18180 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
18190 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
181a0 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
181b0 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20       0x0010  /* 
181c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
181d0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
181e0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
181f0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
18200 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52     0x0020  /* FR
18210 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
18220 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
18230 61 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  a */.           
18240 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
18250 30 78 30 30 34 30 20 20 4e 4f 54 20 55 53 45 44  0x0040  NOT USED
18260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
18270 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
18280 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
18290 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
182a0 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  S clause */.    
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20 20 4e  /*     0x0100  N
182d0 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69  OT USED */.#defi
182e0 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
182f0 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a        0x0200  /*
18300 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
18310 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
18320 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
18330 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
18340 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65     0x0400  /* Ne
18350 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
18360 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
18370 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
18380 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
18390 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68     0x0800  /* Th
183a0 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
183b0 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
183c0 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
183d0 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
183e0 20 20 30 78 31 30 30 30 20 20 2f 2a 20 50 61 72    0x1000  /* Par
183f0 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
18400 71 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  query */.../*.**
18410 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
18420 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
18430 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
18440 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
18450 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
18460 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
18470 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
18480 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
18490 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
184a0 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
184b0 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
184c0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
184d0 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
184e0 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
184f0 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  x .**           
18500 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
18510 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
18520 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
18530 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
18540 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
18550 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
18560 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
18570 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
18580 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
18590 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
185a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
185b0 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
185c0 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
185f0 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
18600 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
18610 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
18620 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
18630 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
18660 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
18670 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
18680 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
18690 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
186a0 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
186b0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
186c0 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
186d0 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
186e0 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
186f0 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
18700 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
18710 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
18720 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
18730 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
18740 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
18750 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
18760 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
18770 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
187a0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
187b0 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
187c0 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
187d0 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
187e0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
187f0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
18800 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
18810 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
18820 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
18830 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
18840 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18860 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
18870 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
18880 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
18890 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
188a0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
188b0 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
188c0 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
188d0 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
188e0 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
188f0 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
18900 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
18910 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
18920 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
18930 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
18940 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
18950 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
18960 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a  st->iSDParm. .**
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61       Apply the a
18990 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61  ffinity pDest->a
189a0 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74  ffSdst before st
189b0 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20  oring.**        
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
189d0 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69  ults.  Used to i
189e0 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45  mplement "IN (SE
189f0 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a  LECT ...)"..**.*
18a00 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54  *     SRT_EphemT
18a10 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20  ab    Create an 
18a20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
18a30 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61  pDest->iSDParm a
18a40 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20  nd store.**     
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65  the result there
18a70 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  . The cursor is 
18a80 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a  left open after.
18a90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18aa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67         returning
18ab0 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20  .  This is like 
18ac0 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74  SRT_Table except
18ad0 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
18af0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73  s destination us
18b00 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  es OP_OpenEpheme
18b10 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  ral to create.**
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66       the table f
18b40 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  irst..**.**     
18b50 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
18b60 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f  Generate a co-ro
18b70 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72  utine that retur
18b80 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a  ns a new row of.
18b90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18ba0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65         results e
18bb0 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69  ach time it is i
18bc0 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74  nvoked.  The ent
18bd0 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20  ry point.**     
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  of the co-routin
18c00 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
18c10 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
18c20 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20  SDParm.**       
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
18c40 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  d the result row
18c50 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44   is stored in pD
18c60 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73  est->nDest regis
18c70 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ters.**         
18c80 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
18c90 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d  ting with pDest-
18ca0 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  >iSdst..**.**   
18cb0 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20    SRT_Table     
18cc0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
18cd0 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  in temporary tab
18ce0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18cf0 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69  m..**     SRT_Fi
18d00 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69  fo        This i
18d10 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d  s like SRT_Ephem
18d20 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20  Tab except that 
18d30 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  the table.**    
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61   is assumed to a
18d60 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20  lready be open. 
18d70 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a   SRT_Fifo has.**
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f       the additio
18da0 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20  nal property of 
18db0 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67  being able to ig
18dc0 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  nore.**         
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
18de0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
18df0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
18e00 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65  istFifo    Store
18e10 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
18e20 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
18e30 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e50 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73       But also us
18e60 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
18e70 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
18e80 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  +1 as.**        
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72               a r
18ea0 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69  ecord of all pri
18eb0 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69  or results and i
18ec0 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63  gnore any duplic
18ed0 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
18ee0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e             rows.
18ef0 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22    Name means:  "
18f00 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a  Distinct Fifo"..
18f10 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75  **.**     SRT_Qu
18f20 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  eue       Store 
18f30 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
18f40 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
18f50 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79  >iSDParm (really
18f60 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18f70 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78          an index
18f80 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71  ).  Append a seq
18f90 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
18fa0 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73  that all entries
18fb0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18fc0 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74          are dist
18fd0 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  inct..**.**     
18fe0 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
18ff0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
19000 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
19010 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f  pDest->iSDParm o
19020 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20  nly if.**       
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19040 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61  e same record ha
19050 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f  s never been sto
19060 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65  red before.  The
19070 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19080 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74          index at
19090 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
190a0 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72  1 hold all prior
190b0 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66   stores..*/.#def
190c0 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
190d0 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
190e0 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
190f0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
19100 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
19110 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
19120 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
19130 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
19140 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
19150 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
19160 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
19170 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
19180 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
19190 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
191a0 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
191b0 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
191c0 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  ywhere */.#defin
191d0 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20  e SRT_Fifo      
191e0 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
191f0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
19200 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
19210 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
19220 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
19230 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    6  /* Like SRT
19240 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75  _Fifo, but uniqu
19250 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
19260 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75  /.#define SRT_Qu
19270 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  eue        7  /*
19280 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
19290 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65   an queue */.#de
192a0 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65  fine SRT_DistQue
192b0 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65  ue    8  /* Like
192c0 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20   SRT_Queue, but 
192d0 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
192e0 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  nly */../* The O
192f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
19300 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
19310 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
19320 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
19330 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
19340 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
19350 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69  istQueue)..#defi
19360 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
19370 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74      9  /* Output
19380 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
19390 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
193a0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31  RT_Mem         1
193b0 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
193c0 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
193d0 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
193e0 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31  RT_Set         1
193f0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
19400 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
19410 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
19420 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
19430 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65     12  /* Create
19440 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
19450 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
19460 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
19470 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
19480 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61     13  /* Genera
19490 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
194a0 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
194b0 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
194c0 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72       14  /* Stor
194d0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
194e0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
194f0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a  ic rowid */../*.
19500 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
19510 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
19520 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
19530 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
19540 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
19550 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
19560 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
19570 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
19580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
19590 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  ow to dispose of
195a0 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f   the results.  O
195b0 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65  n of SRT_* above
195c0 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53  . */.  char affS
195d0 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  dst;        /* A
195e0 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
195f0 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
19600 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
19610 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
19620 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
19630 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
19640 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
19650 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
19660 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
19670 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
19680 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
19690 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
196a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
196b0 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
196c0 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
196d0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
196e0 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c  rBy;  /* Key col
196f0 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65  umns for SRT_Que
19700 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51  ue and SRT_DistQ
19710 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ueue */.};../*.*
19720 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65  * During code ge
19730 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74  neration of stat
19740 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69  ements that do i
19750 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f  nserts into AUTO
19760 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61  INCREMENT .** ta
19770 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
19780 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
19790 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
197a0 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
197b0 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
197c0 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
197d0 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
197e0 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
197f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
19800 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
19810 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
19820 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
19830 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
19840 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
19850 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
19860 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77  serts are down w
19870 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
19880 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
19890 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
198a0 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
198b0 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
198c0 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
198d0 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
198e0 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
198f0 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
19900 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
19910 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
19920 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
19930 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
19940 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
19950 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
19960 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
19970 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
19980 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
19990 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
199a0 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
199b0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
199c0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
199d0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
199e0 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
199f0 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
19a00 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
19a10 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
19a20 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
19a30 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
19a40 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  ;../*.** Size of
19a50 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
19a60 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
19a70 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23  ITE_N_COLCACHE.#
19a80 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
19a90 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e  _COLCACHE 10.#en
19aa0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  dif../*.** At le
19ab0 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
19ac0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
19ad0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
19ae0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
19af0 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
19b00 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
19b10 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
19b20 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
19b30 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
19b40 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
19b50 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
19b60 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
19b70 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
19b80 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
19b90 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
19ba0 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
19bb0 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
19bc0 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
19bd0 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
19be0 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
19bf0 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
19c00 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
19c10 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
19c20 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
19c30 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
19c40 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
19c50 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
19c60 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
19c70 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
19c80 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
19c90 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
19ca0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
19cb0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
19cc0 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
19cd0 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
19ce0 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
19cf0 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
19d00 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
19d10 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
19d20 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
19d30 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
19d40 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
19d50 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
19d60 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
19d70 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
19d80 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
19d90 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
19da0 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  T .** statements
19db0 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
19dc0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
19dd0 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
19de0 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
19df0 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
19e00 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
19e10 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
19e20 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
19e30 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
19e40 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
19e50 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
19e60 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
19e70 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
19e80 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
19e90 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
19ea0 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
19eb0 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
19ec0 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
19ed0 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
19ee0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
19ef0 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
19f00 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
19f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
19f20 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
19f30 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
19f40 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
19f50 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
19f60 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
19f70 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
19f80 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19f90 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
19fa0 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
19fb0 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
19fc0 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
19fd0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
19fe0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
19ff0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
1a000 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
1a010 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1a020 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
1a030 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1a040 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
1a050 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
1a060 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1a070 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
1a080 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
1a090 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
1a0a0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1a0b0 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
1a0c0 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
1a0d0 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1a0e0 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
1a0f0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
1a100 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1a110 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
1a120 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1a130 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
1a140 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1a150 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
1a160 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1a170 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
1a180 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1a190 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
1a1a0 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1a1b0 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
1a1c0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1a1d0 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
1a1e0 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
1a1f0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1a200 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
1a210 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1a220 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1a230 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
1a240 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
1a250 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
1a260 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
1a270 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
1a280 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
1a290 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
1a2a0 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
1a2b0 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
1a2c0 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1a2d0 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
1a2e0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1a2f0 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
1a300 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
1a310 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
1a320 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
1a330 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
1a340 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
1a350 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
1a360 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
1a370 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
1a380 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
1a390 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
1a3a0 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
1a3b0 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
1a3c0 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
1a3d0 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
1a3e0 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
1a3f0 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
1a400 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
1a410 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
1a420 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
1a430 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
1a440 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
1a450 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1a460 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1a470 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1a480 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1a490 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1a4a0 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1a4b0 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1a4c0 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1a4d0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1a4e0 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1a4f0 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1a500 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1a510 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1a520 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1a530 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1a540 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1a550 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1a560 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1a570 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1a580 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1a590 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1a5a0 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1a5b0 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1a5c0 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1a5d0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1a5e0 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1a5f0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1a600 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1a610 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1a620 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1a630 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1a640 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1a650 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1a660 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1a670 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1a680 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1a690 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1a6a0 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1a6b0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1a6c0 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1a6d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1a6e0 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1a6f0 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1a700 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1a710 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1a720 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1a730 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1a740 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1a750 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1a760 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1a770 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1a780 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1a790 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1a7a0 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1a7b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1a7c0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1a7d0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1a7e0 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1a7f0 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1a800 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1a810 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1a820 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1a830 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1a840 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1a850 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1a860 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1a870 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  s */.  int aTemp
1a880 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48  Reg[8];     /* H
1a890 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
1a8a0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1a8b0 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  ers */.  int nRa
1a8c0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1a8d0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1a8e0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1a8f0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1a900 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1a910 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1a920 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1a930 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1a940 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1a950 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a960 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1a970 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1a980 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a990 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1a9a0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1a9b0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1a9c0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1a9d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a9e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1a9f0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1aa00 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
1aa10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1aa20 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
1aa30 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65  r */.  int nOnce
1aa40 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1aa50 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65  umber of OP_Once
1aa60 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f   instructions so
1aa70 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1aa80 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
1aa90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
1aaa0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
1aab0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1aac0 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20  int iFixedOp;   
1aad0 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61       /* Never ba
1aae0 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69  ck out opcodes i
1aaf0 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72  FixedOp-1 or ear
1ab00 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b  lier */.  int ck
1ab10 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
1ab20 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1ab30 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
1ab40 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
1ab50 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49   */.  int iPartI
1ab60 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61  dxTab;     /* Ta
1ab70 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1ab80 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69  g to a partial i
1ab90 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ndex */.  int iC
1aba0 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1abb0 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1abc0 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1abd0 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1abe0 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1abf0 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1ac00 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1ac10 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1ac20 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1ac30 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1ac40 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1ac50 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1ac60 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1ac70 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1ac80 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1ac90 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1aca0 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1acb0 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1acc0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1acd0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1ace0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1acf0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1ad00 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1ad10 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1ad20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1ad30 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1ad40 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1ad50 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1ad60 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1ad70 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1ad80 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1ad90 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1ada0 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1adb0 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1adc0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1add0 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1ade0 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1adf0 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1ae00 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1ae10 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1ae20 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1ae30 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1ae40 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1ae50 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1ae60 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1ae70 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1ae80 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1ae90 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1aea0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1aeb0 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1aec0 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1aed0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1aee0 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1aef0 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1af00 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1af10 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1af20 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1af30 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1af40 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1af50 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1af60 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1af70 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1af80 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
1af90 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
1afa0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
1afb0 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
1afc0 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
1afd0 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
1afe0 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1aff0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1b000 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1b010 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1b020 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1b030 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1b040 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1b050 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1b060 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1b070 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1b080 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1b090 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1b0a0 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1b0b0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 6e  -program */.#ifn
1b0c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b0d0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1b0e0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1b0f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b100 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1b110 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1b120 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1b130 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1b140 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1b150 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1b160 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1b170 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1b180 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1b190 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1b1a0 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1b1b0 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1b1c0 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1b1d0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1b1e0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1b1f0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1b200 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1b210 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1b220 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1b230 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1b240 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1b250 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1b260 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1b270 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1b280 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1b290 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1b2a0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1b2b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1b2c0 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b    int addrSkipPK
1b2d0 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
1b2e0 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e  s of instruction
1b2f0 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59   to skip PRIMARY
1b300 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20   KEY index */.  
1b310 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1b320 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1b330 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1b340 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1b350 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1b360 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1b370 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1b380 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1b390 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1b3a0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1b3b0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1b3c0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1b3d0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1b3e0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1b3f0 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1b400 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1b410 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1b420 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1b430 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1b440 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1b450 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1b460 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1b470 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1b480 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1b490 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1b4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b4b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b4c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b4d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b4e0 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1b4f0 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1b500 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1b510 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1b520 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1b530 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1b540 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1b550 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1b560 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1b570 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1b580 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1b590 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1b5a0 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1b5b0 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1b5c0 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1b5d0 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1b5e0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1b5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1b630 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
1b640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b650 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1b660 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1b670 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1b680 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b6a0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1b6b0 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1b6c0 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1b6d0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1b6e0 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1b6f0 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1b700 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1b710 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20  u8 bFreeWith;   
1b720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1b730 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c  e if pWith shoul
1b740 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20  d be freed with 
1b750 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65  parser */.  u8 e
1b760 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1b770 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1b780 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1b790 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1b7a0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1b7b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1b7c0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1b7d0 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1b7e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b7f0 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1b800 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1b810 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1b820 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1b830 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1b840 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1b850 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1b860 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1b870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b880 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1b890 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1b8a0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1b8b0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1b8c0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1b8d0 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1b8e0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1b8f0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1b900 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1b910 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1b920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1b930 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1b940 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1b950 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1b960 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1b970 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1b980 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1b990 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1b9a0 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1b9b0 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1b9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1b9d0 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1b9e0 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1b9f0 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1ba00 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1ba10 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1ba20 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1ba30 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1ba40 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1ba50 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1ba60 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1ba70 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1ba80 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1ba90 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1baa0 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1bab0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1bac0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1bad0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1bae0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1baf0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1bb00 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1bb10 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1bb20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1bb30 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1bb40 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1bb50 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1bb60 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1bb70 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1bb80 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1bb90 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1bba0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1bbb0 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1bbc0 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1bbd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1bbe0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1bbf0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1bc00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1bc10 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1bc20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bc30 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1bc40 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1bc50 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1bc60 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1bc70 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1bc80 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1bc90 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1bca0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1bcb0 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1bcc0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1bcd0 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1bce0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1bcf0 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1bd00 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1bd10 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1bd20 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1bd30 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1bd40 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1bd50 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1bd60 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1bd70 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a   or NULL */.};..
1bd80 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1bd90 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1bda0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1bdb0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1bdc0 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1bdd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1bde0 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1bdf0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1be00 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1be10 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1be20 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1be30 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1be40 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1be50 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1be60 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1be70 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1be80 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1be90 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1bea0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1beb0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1bec0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1bed0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1bee0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1bef0 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1bf00 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1bf10 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1bf20 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1bf30 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1bf40 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1bf50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1bf60 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1bf70 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1bf80 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1bf90 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1bfa0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1bfb0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1bfc0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1bfd0 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
1bfe0 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
1bff0 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
1c000 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1c010 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1c020 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1c030 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1c040 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1c050 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1c060 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1c070 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1c080 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1c090 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1c0a0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1c0b0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1c0c0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1c0d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c0e0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1c0f0 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1c100 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1c110 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1c120 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c130 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
1c140 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
1c150 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
1c160 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
1c170 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c180 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
1c190 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
1c1a0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1c1b0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
1c1c0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
1c1d0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
1c1e0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1c1f0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
1c200 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
1c210 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
1c220 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
1c230 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
1c240 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
1c250 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
1c260 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1c270 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
1c280 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
1c290 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
1c2a0 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
1c2b0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
1c2c0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1c2d0 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
1c2e0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
1c2f0 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
1c300 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
1c310 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1c320 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
1c330 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
1c340 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
1c350 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
1c360 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
1c370 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1c380 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
1c390 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
1c3a0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
1c3b0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
1c3c0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
1c3d0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
1c3e0 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
1c3f0 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
1c400 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
1c410 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
1c420 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
1c430 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
1c440 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1c450 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
1c460 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
1c470 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
1c480 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
1c490 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
1c4a0 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
1c4b0 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
1c4c0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
1c4d0 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
1c4e0 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
1c4f0 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
1c500 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
1c510 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
1c520 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
1c530 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
1c540 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
1c550 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1c560 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
1c570 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
1c580 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
1c590 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
1c5a0 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
1c5b0 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
1c5c0 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
1c5d0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1c5e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
1c5f0 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
1c600 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
1c610 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
1c620 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
1c630 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
1c640 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
1c650 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
1c660 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
1c670 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1c680 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1c690 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1c6a0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
1c6b0 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
1c6c0 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
1c6d0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
1c6e0 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
1c6f0 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
1c700 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
1c710 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c720 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1c730 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
1c740 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
1c750 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
1c760 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
1c770 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
1c780 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
1c790 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
1c7c0 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
1c7d0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
1c7e0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1c7f0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
1c800 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1c810 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
1c820 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
1c830 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1c840 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
1c850 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
1c860 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
1c870 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
1c880 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
1c890 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
1c8a0 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
1c8b0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1c8c0 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
1c8d0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1c8e0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
1c8f0 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
1c900 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
1c910 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
1c920 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
1c930 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
1c940 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
1c950 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
1c960 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
1c970 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
1c980 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
1c990 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
1c9a0 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
1c9b0 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
1c9c0 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
1c9d0 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
1c9e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
1c9f0 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
1ca00 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
1ca10 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
1ca20 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
1ca30 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1ca40 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
1ca50 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
1ca60 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
1ca70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
1ca80 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1ca90 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
1caa0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1cab0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
1cac0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
1cad0 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
1cae0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
1caf0 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
1cb00 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
1cb10 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1cb20 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
1cb30 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
1cb40 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
1cb50 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
1cb60 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
1cb70 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
1cb80 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
1cb90 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
1cba0 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
1cbb0 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
1cbc0 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
1cbd0 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
1cbe0 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
1cbf0 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
1cc00 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
1cc10 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
1cc20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
1cc30 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
1cc40 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
1cc50 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
1cc60 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
1cc70 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
1cc80 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
1cc90 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
1cca0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1ccb0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1ccc0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1ccd0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1cce0 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1ccf0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1cd00 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1cd10 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1cd20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1cd30 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1cd40 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
1cd50 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1cd60 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1cd70 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1cd80 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
1cd90 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
1cda0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1cdb0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1cdc0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
1cdd0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1cdf0 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
1ce00 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
1ce10 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1ce20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
1ce30 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1ce40 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
1ce50 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
1ce60 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
1ce70 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1ce80 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1ce90 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1cea0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1cec0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1ced0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1cee0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1cef0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1cf00 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1cf10 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1cf20 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1cf30 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1cf40 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1cf50 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1cf60 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1cf70 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1cf80 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1cf90 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1cfa0 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
1cfb0 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65  UPDATE). * targe
1cfc0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1cfd0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1cfe0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1cff0 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72  able to update r
1d000 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72  ows of.. * pWher
1d010 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1d020 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1d030 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1d040 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1d050 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1d060 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1d070 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
1d080 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
1d090 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
1d0a0 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
1d0b0 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
1d0c0 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
1d0d0 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
1d0e0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
1d0f0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
1d100 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
1d120 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
1d130 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1d140 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
1d150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1d160 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1d170 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1d180 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
1d190 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
1d1a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
1d1b0 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
1d1c0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1d1d0 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
1d1e0 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
1d1f0 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
1d200 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
1d210 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
1d220 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20  SELECT statment 
1d230 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1d240 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20   INTO .. SELECT 
1d250 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74  ... */.  Token t
1d260 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
1d270 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1d280 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1d290 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1d2a0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1d2b0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1d2c0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1d2d0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1d2e0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1d2f0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1d300 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1d310 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
1d320 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
1d330 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
1d340 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
1d350 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
1d360 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
1d370 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
1d380 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1d390 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
1d3a0 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
1d3b0 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
1d3c0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
1d3d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1d3e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1d3f0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
1d400 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
1d410 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
1d420 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
1d430 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
1d440 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
1d450 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
1d460 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
1d470 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .  .*/.typedef s
1d480 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
1d490 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
1d4a0 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
1d4b0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
1d4c0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
1d4d0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
1d4e0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
1d4f0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1d500 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
1d510 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
1d520 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
1d530 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
1d540 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
1d550 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
1d560 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
1d570 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
1d580 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
1d590 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
1d5a0 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
1d5b0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
1d5c0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
1d5d0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
1d5e0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1d5f0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1d600 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
1d610 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
1d620 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
1d630 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1d640 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1d650 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1d660 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
1d670 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
1d680 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
1d690 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
1d6a0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1d6b0 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
1d6c0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
1d6d0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
1d6e0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
1d6f0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1d700 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
1d710 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
1d720 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
1d730 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
1d740 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
1d750 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
1d760 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
1d770 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
1d780 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
1d790 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
1d7a0 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
1d7b0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43  far */.  int  nC
1d7c0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
1d7d0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
1d7e0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
1d7f0 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20    int  nAlloc;  
1d800 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
1d810 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
1d820 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
1d830 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20    int  mxAlloc; 
1d840 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1d850 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67  m allowed string
1d860 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20   length */.  u8 
1d870 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20    useMalloc;    
1d880 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31    /* 0: none,  1
1d890 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  : sqlite3DbMallo
1d8a0 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d  c,  2: sqlite3_m
1d8b0 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20  alloc */.  u8   
1d8c0 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
1d8d0 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
1d8e0 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
1d8f0 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  OBIG */.};.#defi
1d900 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  ne STRACCUM_NOME
1d910 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54  M   1.#define ST
1d920 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32  RACCUM_TOOBIG  2
1d930 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
1d940 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
1d950 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
1d960 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
1d970 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
1d980 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
1d990 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
1d9a0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
1d9b0 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
1d9c0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
1d9d0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1d9e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
1d9f0 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
1da00 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
1da10 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
1da20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1da30 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1da40 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1da50 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
1da60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1da70 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
1da80 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
1da90 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1daa0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1dab0 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
1dac0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
1dad0 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
1dae0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
1daf0 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
1db00 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
1db10 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
1db20 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
1db30 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
1db40 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
1db50 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1db60 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
1db70 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
1db80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1db90 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1dba0 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
1dbb0 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
1dbc0 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dbe0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1dbf0 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
1dc00 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
1dc10 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1dc20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1dc30 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
1dc40 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
1dc50 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1dc70 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
1dc80 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
1dc90 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
1dca0 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
1dcb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1dcc0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
1dcd0 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
1dce0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
1dcf0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
1dd00 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1dd10 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
1dd20 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
1dd30 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
1dd40 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
1dd50 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
1dd60 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
1dd70 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd90 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1dda0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1ddb0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1ddc0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1ddd0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1dde0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1ddf0 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1de00 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1de10 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1de20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1de30 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1de40 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1de50 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1de60 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1de70 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1de80 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1de90 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1dea0 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1deb0 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1dec0 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1ded0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1dee0 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1df00 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1df10 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1df20 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1df30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1df40 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1df50 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1df60 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1df70 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1df80 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1df90 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1dfa0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1dfb0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1dfc0 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1dfd0 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1dfe0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1dff0 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1e000 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1e010 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1e020 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1e030 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1e040 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1e050 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1e060 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1e090 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1e0a0 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1e0b0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1e0c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e0d0 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1e0e0 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1e0f0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1e100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1e110 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1e120 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1e150 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1e160 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1e170 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e190 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1e1a0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1e1b0 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1e1c0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1e1d0 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1e1e0 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1e1f0 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1e200 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1e210 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1e220 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1e230 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1e240 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  led */.  /* The 
1e250 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
1e260 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
1e270 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
1e280 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
1e290 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
1e2a0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
1e2b0 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
1e2c0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e2e0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
1e2f0 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
1e300 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
1e310 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e330 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
1e340 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
1e350 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
1e360 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e380 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
1e390 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
1e3a0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1e3b0 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1e3d0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1e3e0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1e3f0 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
1e400 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
1e410 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1e420 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1e430 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1e440 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
1e450 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1e460 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
1e470 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
1e480 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
1e490 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1e4a0 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1e4b0 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1e4c0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1e4d0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
1e4e0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
1e4f0 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
1e500 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
1e510 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
1e520 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
1e530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1e540 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
1e550 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
1e560 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1e570 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
1e580 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
1e590 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1e5a0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
1e5b0 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
1e5c0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
1e5d0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
1e5e0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
1e5f0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
1e600 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
1e610 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
1e620 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
1e630 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
1e640 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
1e650 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
1e660 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
1e670 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
1e680 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
1e690 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c  d*,int iSrcLine,
1e6a0 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
1e6b0 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
1e6c0 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
1e6d0 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e700 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
1e710 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1e720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
1e730 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28  TIN_TEST.  int (
1e740 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
1e750 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
1e760 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
1e770 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
1e780 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
1e790 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1e7a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e7b0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1e7c0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1e7d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
1e7e0 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
1e7f0 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
1e800 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
1e810 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
1e820 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
1e830 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
1e840 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
1e850 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
1e860 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
1e870 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
1e880 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
1e890 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
1e8a0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
1e8b0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
1e8c0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
1e8d0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
1e8e0 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
1e8f0 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
1e900 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
1e910 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
1e920 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
1e930 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
1e940 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
1e950 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
1e960 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
1e970 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
1e980 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
1e990 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1e9a0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
1e9b0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
1e9c0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
1e9d0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
1e9e0 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
1e9f0 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
1ea00 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1ea10 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
1ea20 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
1ea30 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
1ea40 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
1ea50 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
1ea60 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
1ea70 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
1ea80 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
1ea90 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
1eaa0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
1eab0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
1eac0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
1ead0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
1eae0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1eaf0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
1eb00 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
1eb10 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1eb20 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
1eb30 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
1eb40 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
1eb50 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
1eb60 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1eb70 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1eba0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1ebb0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
1ebc0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ebe0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
1ebf0 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f  ueries */.  unio
1ec00 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
1ec30 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
1ec40 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
1ec50 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
1ec80 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
1ec90 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
1ecc0 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53  r value */.    S
1ecd0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1ece0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ecf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
1ed00 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
1ed10 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
1ed20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
1ed30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1ed40 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
1ed50 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1ed60 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
1ed70 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
1ed80 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
1ed90 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
1eda0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1edb0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
1edc0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
1edd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1ede0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
1edf0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1ee00 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1ee10 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
1ee20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1ee30 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
1ee40 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
1ee50 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
1ee60 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
1ee70 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
1ee80 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
1ee90 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
1eea0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
1eeb0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
1eec0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
1eed0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
1eee0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
1eef0 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
1ef00 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
1ef10 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
1ef20 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
1ef30 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
1ef40 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
1ef50 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
1ef60 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
1ef70 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1ef80 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1ef90 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
1efa0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
1efb0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
1efc0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
1efd0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
1efe0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
1eff0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1f000 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
1f010 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
1f020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f030 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
1f040 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1f050 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
1f060 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
1f070 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
1f080 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
1f090 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
1f0a0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f0c0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
1f0d0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1f0e0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
1f0f0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1f100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f110 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
1f120 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
1f130 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
1f140 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1f150 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
1f160 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
1f170 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1f180 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
1f190 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
1f1a0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
1f1b0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
1f1c0 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20  st char *zErr;  
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f1e0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
1f1f0 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
1f200 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
1f210 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  ];.};../*.** Ass
1f220 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1f230 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1f240 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1f250 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1f260 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1f270 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1f280 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1f290 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1f2a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1f2b0 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1f2c0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1f2d0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1f2e0 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1f2f0 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1f320 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1f330 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1f340 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1f350 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f380 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1f390 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1f3a0 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1f3b0 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1f3c0 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1f3d0 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1f3e0 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1f3f0 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1f400 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1f410 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1f420 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1f430 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1f440 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1f450 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1f460 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1f470 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1f480 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1f490 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1f4a0 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1f4b0 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1f4c0 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1f4d0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1f4e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1f4f0 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1f500 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1f510 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1f520 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1f530 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1f540 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1f550 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1f560 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1f570 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1f580 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1f590 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1f5a0 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1f5b0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1f5c0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1f5d0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1f5e0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1f5f0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1f600 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1f610 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1f620 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1f630 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1f640 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1f650 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
1f660 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1f670 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
1f680 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
1f690 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1f6a0 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1f6b0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1f6c0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1f6d0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1f6e0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1f6f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1f700 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1f710 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1f720 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1f730 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1f740 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1f750 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1f760 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1f770 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1f780 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1f790 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1f7a0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1f7b0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1f7c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1f7d0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1f7e0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1f7f0 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1f800 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1f810 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1f820 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1f830 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1f840 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1f850 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1f860 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1f870 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1f880 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1f890 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1f8a0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1f8b0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1f8c0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1f8d0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1f8e0 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1f8f0 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1f900 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f910 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1f920 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1f930 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1f940 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1f950 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1f960 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1f970 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f980 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f990 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1f9a0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1f9b0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f9c0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f9d0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1f9e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f9f0 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1fa00 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1fa10 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1fa20 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1fa30 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1fa40 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1fa50 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1fa60 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1fa70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1fa80 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1fa90 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1faa0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1fab0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1fac0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1fad0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1fae0 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1faf0 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1fb00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1fb10 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1fb20 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1fb30 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1fb40 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1fb50 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1fb60 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1fb70 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1fb80 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1fb90 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1fba0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1fbb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1fbc0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
1fbd0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1fbe0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1fbf0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1fc00 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1fc10 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1fc20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1fc30 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1fc40 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1fc50 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1fc60 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1fc70 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1fc80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1fc90 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1fca0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1fcb0 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1fcc0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1fcd0 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1fce0 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1fcf0 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1fd00 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1fd10 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1fd20 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1fd30 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1fd40 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1fd50 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1fd60 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1fd70 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1fd80 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1fd90 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1fda0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1fdb0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1fdc0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1fdd0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1fde0 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1fdf0 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1fe00 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1fe10 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1fe20 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1fe30 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1fe40 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1fe50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1fe60 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1fe70 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1fe80 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1fe90 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1fea0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1feb0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1fec0 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1fed0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1fee0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1fef0 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1ff00 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1ff10 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1ff20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1ff30 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1ff40 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1ff50 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1ff60 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1ff70 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1ff80 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1ff90 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1ffa0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1ffb0 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1ffc0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1ffd0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1ffe0 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1fff0 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
20000 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
20010 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
20020 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
20030 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
20040 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
20050 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
20060 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
20070 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
20080 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
20090 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
200a0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
200b0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
200c0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
200d0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
200e0 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
200f0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
20100 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
20110 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
20120 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
20130 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
20140 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
20150 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
20160 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
20170 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
20180 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
20190 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
201a0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
201b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
201c0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
201d0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
201e0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
201f0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
20200 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
20210 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
20220 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
20230 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
20240 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20250 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
20260 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
20270 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
20280 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20290 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
202a0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
202b0 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
202c0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
202d0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
202e0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
202f0 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
20300 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
20310 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
20320 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
20330 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
20340 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
20350 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
20360 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
20370 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
20380 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
20390 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
203a0 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
203b0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
203c0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
203d0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
203e0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
203f0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
20400 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
20410 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
20420 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
20430 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
20440 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
20450 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
20460 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
20470 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
20480 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
20490 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
204a0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
204b0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
204c0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
204d0 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
204e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
204f0 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
20500 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
20510 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
20520 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
20530 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
20540 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
20550 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20560 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
20570 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
20580 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
20590 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
205a0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
205b0 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
205c0 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
205d0 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
205e0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
205f0 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
20600 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
20610 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
20620 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
20630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20640 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
20650 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
20660 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
20670 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20680 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
20690 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
206a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
206b0 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
206c0 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
206d0 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51  /.};..#define SQ
206e0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
206f0 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e  RNAL 0x01.#defin
20700 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
20710 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f  SQLFUNC  0x02.vo
20720 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
20730 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
20740 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
20750 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73  va_list);.void s
20760 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
20770 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f  rAccum*, u32, co
20780 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
20790 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
207a0 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
207b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
207c0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
207d0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
207e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
207f0 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71  _list);.char *sq
20800 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71  lite3MAppendf(sq
20810 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e  lite3*,char*,con
20820 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
20830 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20840 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e  E_TEST) || defin
20850 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
20860 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
20870 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
20880 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
20890 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
208a0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
208b0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
208c0 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
208d0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
208e0 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61  ./* Output forma
208f0 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45  tting for SQLITE
20900 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49  _TESTCTRL_EXPLAI
20910 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  N */.#if defined
20920 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54  (SQLITE_ENABLE_T
20930 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76  REE_EXPLAIN).  v
20940 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20950 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a  inBegin(Vdbe*);.
20960 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20970 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65  plainPrintf(Vdbe
20980 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20990 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ...);.  void sql
209a0 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64  ite3ExplainNL(Vd
209b0 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
209c0 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28  ite3ExplainPush(
209d0 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
209e0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70  qlite3ExplainPop
209f0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
20a00 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
20a10 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  nish(Vdbe*);.  v
20a20 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20a30 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20  inSelect(Vdbe*, 
20a40 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
20a50 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
20a60 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a  xpr(Vdbe*, Expr*
20a70 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20a80 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
20a90 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74  (Vdbe*, ExprList
20aa0 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *);.  const char
20ab0 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78 70   *sqlite3VdbeExp
20ac0 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b  lanation(Vdbe*);
20ad0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20ae0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
20af0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
20b00 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
20b10 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69  lect(A,B).# defi
20b20 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
20b30 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66  nExpr(A,B).# def
20b40 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
20b50 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a  inExprList(A,B).
20b60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20b70 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29  ExplainFinish(X)
20b80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20b90 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
20ba0 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76  (X) 0.#endif...v
20bb0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
20bc0 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
20bd0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
20be0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
20bf0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
20c00 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
20c10 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
20c20 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
20c30 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
20c40 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
20c50 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
20c60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20c70 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
20c80 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
20c90 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
20ca0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
20cb0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
20cc0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
20cd0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
20ce0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
20cf0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
20d00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20d10 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
20d20 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
20d30 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
20d40 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
20d50 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
20d60 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
20d70 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
20d80 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
20d90 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
20da0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
20db0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
20dc0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
20dd0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
20de0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20df0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
20e00 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
20e10 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
20e20 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
20e30 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
20e40 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
20e50 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
20e60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
20e70 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
20e80 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
20e90 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
20ea0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
20eb0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
20ec0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
20ed0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
20ee0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
20ef0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
20f00 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
20f10 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
20f20 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
20f30 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
20f40 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
20f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20f60 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
20f70 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
20f80 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
20f90 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
20fa0 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
20fb0 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
20fc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20fd0 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
20fe0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
20ff0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21000 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
21010 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
21020 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
21030 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
21040 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
21050 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
21060 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
21070 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
21080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21090 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
210a0 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
210b0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
210c0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
210d0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
210e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
210f0 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
21100 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
21110 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
21120 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
21130 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
21140 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
21150 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
21160 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
21170 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
21180 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
21190 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
211a0 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
211b0 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
211c0 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
211d0 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
211e0 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
211f0 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
21200 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
21210 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
21220 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
21230 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
21240 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21250 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
21260 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
21270 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
21280 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
21290 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
212a0 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
212b0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
212c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
212d0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
212e0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
212f0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
21300 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
21310 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
21320 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21330 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
21340 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
21350 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21360 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
21370 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
21380 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
21390 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
213a0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
213b0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
213c0 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
213d0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
213e0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
213f0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
21400 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
21410 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
21420 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
21430 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
21440 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
21450 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
21460 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
21470 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  se *);..#ifdef S
21480 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
21490 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65  IN_TEST.# define
214a0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
214b0 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
214c0 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
214d0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
214e0 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
214f0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
21500 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
21510 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
21520 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
21530 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21540 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
21550 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
21560 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
21570 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
21580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
21590 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
215a0 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
215b0 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
215c0 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
215d0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
215e0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
215f0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
21600 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
21610 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
21620 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
21630 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
21640 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
21650 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
21660 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
21670 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
21680 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
21690 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
216a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
216b0 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
216c0 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
216d0 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
216e0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
216f0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
21700 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
21710 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
21720 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
21730 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
21740 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
21750 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
21760 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
21770 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
21780 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
21790 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
217a0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
217b0 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
217c0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
217d0 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
217e0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
217f0 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
21800 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
21810 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
21820 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
21830 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21840 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
21850 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
21860 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21870 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
21880 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
21890 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
218a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
218b0 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
218c0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
218d0 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
218e0 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
218f0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
21900 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
21910 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
21920 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
21930 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
21940 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
21950 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
21960 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
21970 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
21980 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
21990 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
219a0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
219b0 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
219c0 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
219d0 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
219e0 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
219f0 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
21a00 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
21a10 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
21a20 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
21a30 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
21a40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
21a50 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
21a60 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
21a70 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
21a80 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
21a90 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
21aa0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
21ab0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
21ac0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
21ad0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
21ae0 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
21af0 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
21b00 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
21b10 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
21b40 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
21b50 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
21b60 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
21b70 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
21b80 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
21b90 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ken *);.int sqli
21ba0 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
21bb0 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
21bc0 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
21bd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21be0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
21bf0 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
21c00 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
21c10 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
21c20 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
21c30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21c40 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
21c50 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
21c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
21c70 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
21c80 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
21c90 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
21ca0 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
21cb0 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
21cc0 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65  nt,char**);.Inde
21cd0 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
21ce0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
21cf0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
21d00 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
21d10 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
21d40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21d50 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
21d60 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
21d70 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
21d80 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
21d90 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
21da0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
21db0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
21dc0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
21dd0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
21de0 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
21e10 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
21e20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21e30 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
21e40 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
21e50 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
21e60 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
21e70 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
21e80 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
21e90 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
21ea0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
21eb0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
21ec0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
21ed0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
21ee0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
21ef0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
21f00 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
21f10 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
21f20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21f30 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
21f40 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
21f50 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
21f60 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
21f70 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
21f80 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
21f90 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
21fa0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
21fb0 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
21fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
21fd0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
21fe0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
21ff0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
22000 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
22010 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
22020 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
22030 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
22040 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
22050 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
22060 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
22070 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65  u64 sqlite3Where
22080 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
22090 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
220a0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
220b0 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
220c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
220d0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
220e0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
220f0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
22100 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
22110 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22120 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
22130 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22140 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
22150 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
22160 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22170 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
22180 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
22190 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
221a0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
221b0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
221c0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
221d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
221e0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
221f0 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
22200 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
22210 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22220 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
22230 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
22240 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22250 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
22260 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
22270 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22280 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
22290 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
222a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
222b0 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
222c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
222d0 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
222e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
222f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22300 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
22310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22320 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
22330 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
22340 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22350 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
22360 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22380 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
22390 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
223a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
223b0 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
223c0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
223d0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
223e0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
223f0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
22400 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
22410 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
22420 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
22430 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22440 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
22450 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
22460 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
22470 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
22480 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
22490 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38  prList*, int, u8
224a0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
224b0 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
224c0 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
224d0 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
224e0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
224f0 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
22500 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
22510 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
22520 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  erms */.void sql
22530 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
22540 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
22550 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22560 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
22570 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22580 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
22590 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
225a0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
225b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
225c0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
225d0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
225e0 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
225f0 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
22600 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
22610 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
22620 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
22630 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
22640 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
22650 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
22660 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
22670 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
22680 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
22690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
226a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
226b0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
226c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
226d0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
226e0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
226f0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
22700 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
22710 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
22720 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
22730 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
22740 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
22750 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
22760 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
22770 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
22780 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
22790 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
227a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
227b0 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
227c0 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
227d0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
227e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
227f0 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20  liesExpr(Expr*, 
22800 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22810 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
22820 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
22830 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
22840 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22850 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
22860 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
22870 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
22880 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
22890 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
228a0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
228b0 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
228c0 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  be(Parse*);.void
228d0 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
228e0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
228f0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
22900 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
22910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
22920 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
22930 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22940 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
22950 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
22960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22970 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
22980 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
22990 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
229a0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
229b0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
229c0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
229d0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
229e0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
229f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
22a00 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
22a10 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22a20 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
22a30 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
22a40 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22a50 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
22a60 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
22a70 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
22a80 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
22a90 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
22aa0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
22ab0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
22ac0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
22ad0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
22ae0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
22af0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
22b00 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
22b10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
22b20 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
22b30 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
22b40 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
22b50 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
22b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22b70 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
22b80 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
22b90 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
22ba0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
22bb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22bc0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
22bd0 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65  eRowDelete(Parse
22be0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
22bf0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
22c00 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  6,u8,u8,u8);.voi
22c10 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
22c20 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
22c30 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
22c40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  int, int, int*);
22c50 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
22c60 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
22c70 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
22c80 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
22c90 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
22ca0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
22cb0 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
22cc0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
22cd0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
22ce0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
22cf0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
22d00 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
22d10 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
22d40 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
22d50 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
22d60 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
22d70 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
22d80 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
22d90 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22da0 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
22db0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
22dc0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  e*, int, int, u8
22dd0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
22de0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
22df0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
22e00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
22e10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
22e20 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
22e30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
22e40 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
22e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
22e60 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
22e70 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
22e80 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
22e90 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
22ea0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
22eb0 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
22ec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
22ed0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
22ee0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
22ef0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
22f00 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
22f10 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
22f20 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
22f30 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
22f40 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
22f50 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22f60 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
22f70 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
22f80 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
22f90 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
22fa0 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
22fb0 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
22fc0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
22fd0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
22fe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  ;.void sqlite3Fu
22ff0 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
23000 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
23010 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
23020 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
23030 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
23040 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
23050 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
23060 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
23070 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
23080 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
23090 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
230a0 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
230b0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
230c0 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
230d0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
230e0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
230f0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
23100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
23110 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
23120 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
23130 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
23140 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
23150 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
23160 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
23170 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
23180 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
23190 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
231a0 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
231b0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
231c0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
231d0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
231e0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
231f0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
23200 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
23210 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
23220 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
23230 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23250 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
23260 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
23270 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
23280 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
23290 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
232a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
232b0 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
232c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
232d0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
232e0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
232f0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
23300 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
23310 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
23320 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
23330 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
23340 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
23350 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
23360 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
23370 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
23380 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
23390 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
233a0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
233b0 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
233c0 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
233d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
233f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
23400 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
23410 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
23420 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
23430 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
23440 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
23450 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
23460 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
23470 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
23480 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
23490 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
234a0 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
234b0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
234c0 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
234d0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
234e0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
234f0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
23500 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
23510 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
23520 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
23530 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
23540 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
23570 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
23580 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
23590 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
235a0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
235b0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
235c0 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
235d0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
235e0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
235f0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
23600 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
23610 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
23620 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
23630 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
23640 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
23650 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
23660 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
23670 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
23680 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
23690 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
236a0 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
236b0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
236c0 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
236d0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
236e0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
236f0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
23700 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
23710 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23720 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
23730 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
23740 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
23750 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
23760 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
23770 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
23780 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
23790 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
237a0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
237b0 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
237c0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
237d0 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
237e0 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
237f0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
23800 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
23810 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
23820 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
23830 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
23840 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
23850 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
23860 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
23870 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
23880 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
23890 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
238a0 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
238b0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
238c0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
238d0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
238e0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
238f0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
23900 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
23910 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23920 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
23930 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
23940 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
23950 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
23960 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
23970 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
23980 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
23990 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
239a0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
239b0 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
239c0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
239d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
239e0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
239f0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
23a00 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
23a10 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
23a20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
23a30 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
23a40 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
23a50 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
23a60 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
23a70 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
23a80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
23a90 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
23aa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
23ab0 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
23ac0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
23ad0 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
23ae0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
23af0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23b00 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
23b10 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
23b20 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
23b30 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
23b40 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
23b50 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
23b60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
23b70 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
23b80 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
23b90 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
23ba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
23bb0 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
23bc0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
23bd0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
23be0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
23bf0 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
23c00 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
23c10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
23c20 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
23c30 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
23c40 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
23c50 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
23c60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
23c70 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
23c80 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
23c90 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
23ca0 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
23cb0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
23cc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
23cd0 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
23ce0 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
23cf0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
23d00 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
23d10 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
23d20 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
23d30 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
23d40 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
23d50 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
23d60 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
23d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
23d80 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
23d90 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
23da0 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
23db0 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
23dc0 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
23dd0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
23de0 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
23df0 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
23e00 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
23e10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23e20 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
23e30 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
23e40 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
23e50 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20  le);.#endif.u64 
23e60 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
23e70 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a  nt(LogEst);../*.
23e80 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
23e90 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
23ea0 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
23eb0 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
23ec0 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
23ed0 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
23ee0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
23ef0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
23f00 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
23f10 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  * file..*/.int s
23f20 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
23f30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
23f40 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u64);.u8 sqlite3
23f50 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
23f60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
23f70 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
23f80 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
23f90 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
23fa0 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
23fb0 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
23fc0 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
23fd0 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
23fe0 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e  e is for a varin
23ff0 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65  t to be a single
24000 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c   byte.  They fol
24010 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73  lowing.** macros
24020 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d   handle the comm
24030 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20  on case without 
24040 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c  a procedure call
24050 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a  , but then call.
24060 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  ** the procedure
24070 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69   for larger vari
24080 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nts..*/.#define 
24090 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  getVarint32(A,B)
240a0 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29    \.  (u8)((*(A)
240b0 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d  <(u8)0x80)?((B)=
240c0 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c  (u32)*(A)),1:sql
240d0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
240e0 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29  (A),(u32 *)&(B))
240f0 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  ).#define putVar
24100 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
24110 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
24120 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d  u32)0x80)?(*(A)=
24130 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24140 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65  B)),1:\.  sqlite
24150 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28  3PutVarint((A),(
24160 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
24170 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
24180 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
24190 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
241a0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
241b0 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
241c0 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
241d0 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49  ityStr(Vdbe *, I
241e0 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ndex *);.void sq
241f0 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
24200 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  ty(Vdbe*, Table*
24210 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  , int);.char sql
24220 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
24230 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
24240 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
24250 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
24260 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
24270 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
24280 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
24290 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
242a0 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
242b0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
242c0 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
242d0 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
242e0 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
242f0 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
24300 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
24310 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
24320 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
24330 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
24340 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
24350 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
24360 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
24370 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
24380 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
24390 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
243a0 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
243b0 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
243c0 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
243d0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
243e0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
243f0 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
24400 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
24410 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71   .const char *sq
24420 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
24430 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
24440 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
24450 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
24460 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
24470 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
24480 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24490 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
244a0 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
244b0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
244c0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
244d0 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
244e0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
244f0 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
24500 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
24510 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
24520 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
24530 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
24540 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
24550 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
24560 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
24570 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
24580 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
24590 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
245a0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
245b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
245c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
245d0 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
245e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
245f0 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
24600 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
24610 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
24620 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
24630 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
24640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
24650 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
24660 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
24670 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
24680 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
24690 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
246a0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
246b0 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
246c0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
246d0 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
246e0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
246f0 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
24700 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
24710 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
24720 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
24730 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24740 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
24750 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
24760 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
24770 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
24780 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
24790 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
247a0 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
247b0 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
247c0 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
247d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
247e0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
247f0 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
24800 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
24810 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
24820 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
24830 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
24840 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
24850 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
24860 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
24870 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
24880 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
24890 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
248a0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
248b0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
248c0 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
248d0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
248e0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
248f0 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
24900 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
24910 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
24920 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
24930 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
24940 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
24950 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
24960 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
24970 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
24980 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
24990 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
249a0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
249b0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
249c0 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
249d0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
249e0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
249f0 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
24a00 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
24a10 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
24a20 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
24a30 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
24a40 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
24a50 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
24a60 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
24a70 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
24a80 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
24a90 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
24aa0 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
24ab0 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
24ac0 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
24ad0 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
24ae0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
24af0 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
24b00 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24b10 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
24b20 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
24b30 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24b40 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
24b50 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
24b60 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
24b70 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
24b80 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
24b90 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
24ba0 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
24bb0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
24bc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
24bd0 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
24be0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
24bf0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
24c00 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
24c10 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
24c20 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
24c30 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
24c40 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
24c50 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
24c60 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
24c70 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
24c80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
24c90 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
24ca0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
24cb0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
24cc0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24cd0 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
24ce0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24cf0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
24d00 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
24d10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
24d20 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
24d30 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
24d40 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24d50 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
24d60 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
24d70 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
24d80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24d90 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
24da0 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
24db0 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
24dc0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
24dd0 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
24de0 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
24df0 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
24e00 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
24e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
24e20 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
24e30 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
24e40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24e50 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
24e60 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
24e70 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
24e80 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
24e90 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
24ea0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
24eb0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24ec0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
24ed0 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
24ee0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
24ef0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
24f00 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
24f10 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69  char*, u8*);.voi
24f20 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
24f30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
24f40 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
24f50 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
24f60 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
24f70 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
24f80 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
24f90 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
24fa0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
24fb0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
24fc0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
24fd0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
24fe0 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
24ff0 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
25000 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
25010 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
25020 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
25030 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
25040 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
25050 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
25060 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
25070 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
25080 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
25090 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
250a0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
250b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
250c0 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
250d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
250e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
250f0 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
25100 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
25110 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
25120 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
25130 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
25140 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
25150 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
25160 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
25170 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
25180 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74  sqlite3*,int,int
25190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b  );.void sqlite3K
251a0 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49  eyInfoUnref(KeyI
251b0 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
251c0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65  sqlite3KeyInfoRe
251d0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
251e0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
251f0 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73  InfoOfIndex(Pars
25200 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  e*, Index*);.#if
25210 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25220 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
25230 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
25240 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
25250 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
25260 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
25270 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
25280 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
25290 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  , .  void (*)(sq
252a0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
252b0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
252c0 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
252d0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
252e0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
252f0 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
25300 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
25310 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
25320 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
25330 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  or.);.int sqlite
25340 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
25350 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
25360 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
25370 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
25380 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
25390 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
253a0 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ccum*, char*, in
253b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
253c0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
253d0 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
253e0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
253f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25400 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74  ccumAppendAll(St
25410 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
25420 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25430 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53 74  e3AppendSpace(St
25440 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68  rAccum*,int);.ch
25450 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
25460 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
25470 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
25480 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
25490 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
254a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
254b0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
254c0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
254d0 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
254e0 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
254f0 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
25500 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
25510 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
25520 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
25530 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
25540 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
25550 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
25560 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
25570 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20   u8 *);..#ifdef 
25580 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
25590 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
255a0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
255b0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
255c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
255d0 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50  4ProbeSetValue(P
255e0 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
255f0 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
25600 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29  pr*,u8,int,int*)
25610 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
25620 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  t4ValueFromExpr(
25630 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
25640 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
25650 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
25660 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28  3Stat4ProbeFree(
25670 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29  UnpackedRecord*)
25680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
25690 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33  t4Column(sqlite3
256a0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
256b0 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65  int, int, sqlite
256c0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64  3_value**);.#end
256d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
256e0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
256f0 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
25700 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
25710 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
25720 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
25730 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
25740 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
25750 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
25760 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
25770 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
25780 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
25790 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
257a0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
257b0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
257c0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
257d0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
257e0 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
257f0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
25800 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
25810 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
25820 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
25830 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
25840 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
25850 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25860 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
25870 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
25880 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
25890 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
258a0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
258b0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
258c0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
258d0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
258e0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
258f0 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
25900 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
25910 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
25920 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
25930 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
25940 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
25950 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
25960 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
25970 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
25980 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
25990 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
259a0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
259b0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
259c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
259d0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
259e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
259f0 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
25a00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25a10 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
25a20 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25a30 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
25a40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25a50 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
25a60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25a70 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
25a80 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25a90 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
25aa0 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
25ab0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
25ac0 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
25ad0 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
25ae0 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
25af0 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
25b00 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
25b10 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
25b20 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
25b30 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
25b40 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
25b50 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
25b60 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
25b70 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
25b80 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
25b90 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
25ba0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
25bb0 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
25bc0 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
25bd0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
25be0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
25bf0 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
25c00 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
25c10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
25c20 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
25c30 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
25c40 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
25c50 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
25c60 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
25c70 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
25c80 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
25c90 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
25ca0 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
25cb0 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
25cc0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
25cd0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25ce0 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
25cf0 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
25d00 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
25d10 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69  s==0).#endif.voi
25d20 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
25d30 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
25d40 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
25d50 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
25d60 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
25d70 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
25d80 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
25d90 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
25da0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
25db0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
25dc0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
25dd0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25de0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
25df0 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
25e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
25e10 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
25e20 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
25e30 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
25e40 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
25e50 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
25e60 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
25e70 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
25e80 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
25e90 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
25ea0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
25eb0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
25ec0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
25ed0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
25ee0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
25ef0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
25f00 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
25f10 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
25f20 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
25f30 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
25f40 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
25f50 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
25f60 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
25f70 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
25f80 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
25f90 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
25fa0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
25fb0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
25fc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
25fd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
25fe0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
25ff0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
26000 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
26010 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
26020 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
26030 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
26040 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
26050 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
26060 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
26070 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
26080 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
26090 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
260a0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
260b0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
260c0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
260d0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
260e0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
260f0 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
26100 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
26110 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
26120 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26130 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
26140 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
26150 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
26160 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
26170 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
26180 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
26190 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
261a0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
261b0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
261c0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
261d0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
261e0 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
261f0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
26200 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
26210 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
26220 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
26230 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
26240 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
26250 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
26260 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
26270 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
26280 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
26290 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
262a0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
262b0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
262c0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
262d0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
262e0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
262f0 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
26300 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
26310 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
26320 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
26330 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
26340 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
26350 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
26360 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
26370 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
26380 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
26390 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
263a0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
263b0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
263c0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
263d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
263e0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
263f0 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
26400 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76  lity is .** prov
26410 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
26420 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
26430 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
26440 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
26450 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
26460 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
26470 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
26480 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
26490 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
264a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
264b0 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
264c0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
264d0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
264e0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
264f0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
26500 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
26510 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26520 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
26530 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
26540 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
26550 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
26560 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
26570 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26580 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
26590 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
265a0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
265b0 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
265c0 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
265d0 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
265e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
265f0 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
26600 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
26610 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
26620 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
26630 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
26640 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
26650 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26660 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
26670 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
26680 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
26690 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
266a0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
266b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
266c0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
266d0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
266e0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
266f0 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
26700 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
26710 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
26720 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
26730 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
26740 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
26750 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
26760 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
26770 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
26780 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
26790 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
267a0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
267b0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
267c0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
267d0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
267e0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
267f0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
26800 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
26810 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
26820 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
26830 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
26840 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
26850 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
26860 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
26870 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
26880 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
26890 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
268a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
268b0 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
268c0 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
268d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
268e0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
268f0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
26900 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
26910 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
26920 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
26930 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
26940 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26950 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
26960 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
26970 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
26980 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
26990 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
269a0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
269b0 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
269c0 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
269d0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
269e0 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
269f0 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
26a00 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
26a10 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
26a20 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
26a30 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
26a40 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
26a50 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
26a60 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
26a70 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
26a80 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
26a90 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
26aa0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
26ab0 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
26ac0 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
26ad0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
26ae0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
26af0 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
26b00 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
26b10 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
26b20 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
26b30 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
26b40 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
26b50 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
26b60 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
26b70 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
26b80 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
26b90 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
26ba0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
26bb0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
26bc0 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
26bd0 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
26be0 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
26bf0 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
26c00 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
26c10 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
26c20 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
26c30 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
26c40 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
26c50 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
26c60 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
26c70 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64  32, int*);..#ifd
26c80 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
26c90 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
26ca0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
26cb0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
26cc0 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
26cd0 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
26ce0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
26cf0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
26d00 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
26d10 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
26d20 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
26d30 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
26d40 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
26d50 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
26d60 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
26d70 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
26d80 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
26d90 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
26da0 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
26db0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
26dc0 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
26dd0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
26de0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
26df0 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
26e00 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26e10 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
26e20 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
26e30 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
26e40 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
26e50 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
26e60 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
26e70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
26e80 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
26e90 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
26ea0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
26eb0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
26ec0 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
26ed0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
26ee0 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
26ef0 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
26f00 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
26f10 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
26f20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26f30 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
26f40 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
26f50 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
26f60 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
26f70 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
26f80 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
26f90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26fa0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
26fb0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
26fc0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
26fd0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
26fe0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
26ff0 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
27000 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
27010 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
27020 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
27030 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
27040 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
27050 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
27060 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
27070 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27080 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
27090 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
270a0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
270b0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
270c0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
270d0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
270e0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
270f0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27100 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
27110 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
27120 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
27130 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
27140 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
27150 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
27160 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
27170 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
27180 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
27190 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
271a0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
271b0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
271c0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
271d0 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
271e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
271f0 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
27200 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
27210 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
27220 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27230 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
27240 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
27250 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
27260 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
27270 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
27280 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
27290 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
272a0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
272b0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
272c0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
272d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
272e0 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
272f0 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
27300 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
27310 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
27320 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
27330 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
27340 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
27350 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
27360 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
27370 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
27380 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
27390 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
273a0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
273b0 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
273c0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
273d0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
273e0 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
273f0 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
27400 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
27410 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
27420 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
27430 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
27440 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
27450 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
27460 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
27470 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
27480 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
27490 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
274a0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
274b0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
274c0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
274d0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
274e0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
274f0 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
27500 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
27510 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
27520 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
27530 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
27540 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
27550 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
27560 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
27570 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
27580 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
27590 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
275a0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
275b0 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
275c0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
275d0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
275e0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
275f0 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
27600 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
27610 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
27620 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
27630 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
27640 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
27650 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
27660 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
27670 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
27680 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
27690 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
276a0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
276b0 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
276c0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
276d0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
276e0 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
276f0 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
27700 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
27710 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
27720 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
27730 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
27740 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
27750 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
27760 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
27770 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
27780 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
27790 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
277a0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
277b0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
277c0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
277d0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
277e0 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
277f0 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
27800 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
27810 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
27820 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
27830 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
27840 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
27850 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
27860 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
27870 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
27880 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
27890 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
278a0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
278b0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
278c0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
278d0 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
278e0 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
278f0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
27900 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
27910 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
27920 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
27930 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
27940 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
27950 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
27960 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
27970 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
27980 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
27990 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
279a0 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
279b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
279c0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
279d0 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
279e0 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
279f0 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
27a00 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
27a10 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
27a20 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
27a30 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
27a40 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
27a50 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
27a60 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
27a70 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
27a80 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
27a90 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
27aa0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
27ab0 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
27ac0 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  c */../*.** Thre
27ad0 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
27ae0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
27af0 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
27b00 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
27b10 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
27b20 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
27b30 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
27b40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
27b50 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
27b60 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
27b70 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
27b80 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
27b90 2a 2f 0a                                         */.