/ Hex Artifact Content
Login

Artifact d8e721af078ab712d920823b5bac9ffea62481c7:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
16b0: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
16c0: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
16d0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
16e0: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
16f0: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1700: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1710: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1720: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1730: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1740: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1750: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1760: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1770: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1780: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1790: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
17a0: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
17b0: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
17c0: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
17d0: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
17e0: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
17f0: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1800: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1810: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1820: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1830: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1840: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1850: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1860: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1870: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1880: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1890: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
18a0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
18b0: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
18c0: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
18d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
18e0: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
18f0: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1910: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1920: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1930: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1940: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1950: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1960: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1970: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1980: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1990: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
19a0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
19b0: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
19c0: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
19d0: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
19e0: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
19f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1a00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1a10: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1a20: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45  ** The SQLITE_DE
1a30: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
1a40: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1a50: 66 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20  fined as either 
1a60: 30 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65  0 or 1..** It de
1a70: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
1a80: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74   or not the feat
1a90: 75 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  ures related to 
1aa0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  .** SQLITE_CONFI
1ab0: 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20  G_MEMSTATUS are 
1ac0: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ad0: 61 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69  ault or not. Thi
1ae0: 73 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62  s value can.** b
1af0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  e overridden at 
1b00: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
1b10: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  e sqlite3_config
1b20: 28 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21  () API..*/.#if !
1b30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b40: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1b50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b60: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1b70: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1b80: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1b90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba0: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1bb0: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1bc0: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1bd0: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1be0: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1bf0: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1c00: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1c10: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1c20: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1c30: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1c40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1c50: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1c60: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1c70: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1c80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1c90: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1ca0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1cb0: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1cc0: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1cd0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1ce0: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1cf0: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1d00: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1d10: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1d20: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1d30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1d40: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1d50: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1d60: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1d70: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1d80: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1d90: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
1da0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
1db0: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
1dc0: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
1dd0: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
1de0: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
1df0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
1e00: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
1e10: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
1e20: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
1e30: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1e40: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1e50: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1e60: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1e70: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1e80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1e90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1ea0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1eb0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
1ec0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1ed0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
1ee0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1ef0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1f00: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1f10: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1f40: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1f50: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1f60: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1f70: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1f80: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1f90: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
1fa0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
1fb0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
1fc0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
1fd0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1fe0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1ff0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2010: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2020: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2030: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2040: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2050: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
2060: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2070: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
2080: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2090: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
20a0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
20b0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
20c0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
20d0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
20e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
20f0: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2100: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2110: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2120: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2130: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
2140: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2150: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
2160: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
2170: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
2180: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
2190: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
21a0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
21b0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
21c0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
21d0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
21e0: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
21f0: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2200: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2210: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2220: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2230: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
2240: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
2250: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
2260: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
2270: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
2280: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
2290: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
22a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
22b0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
22c0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
22d0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
22e0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
22f0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2300: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2310: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2320: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2330: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
2340: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
2350: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
2360: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
2370: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
2380: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
2390: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
23a0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
23b0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
23c0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23d0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
23e0: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
23f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2400: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2410: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2420: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2430: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
2440: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
2450: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
2460: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
2470: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
2480: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
2490: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
24a0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
24b0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
24d0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
24e0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24f0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2500: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2510: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2520: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2530: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2540: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2550: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2560: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2570: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2580: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2590: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
25a0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
25c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
25d0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
25e0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
25f0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2600: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2610: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2620: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2630: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
2640: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2650: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2660: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2670: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2680: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2690: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
26a0: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
26b0: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
26c0: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
26d0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
26e0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
26f0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2700: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2710: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2720: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2730: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2740: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2750: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2760: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2770: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2780: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2790: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
27a0: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
27b0: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
27c0: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
27d0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
27e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
27f0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2800: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2810: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2820: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2830: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2840: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2850: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2860: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2870: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2880: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2890: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
28a0: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
28b0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
28c0: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28d0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
28e0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
28f0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2900: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2910: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2920: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2930: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2940: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2950: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2960: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2970: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2980: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2990: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
29a0: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
29b0: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
29c0: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
29d0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
29e0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
29f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2a00: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2a10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2a20: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2a30: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2a40: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2a50: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2a60: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2a70: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2a80: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2a90: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2aa0: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2ab0: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2ac0: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2ad0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2ae0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2af0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2b00: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2b10: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2b20: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2b30: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2b40: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2b50: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2b60: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2b70: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2b80: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2b90: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2ba0: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2bb0: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2bc0: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2bd0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2be0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2bf0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2c00: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2c10: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2c20: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2c30: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2c40: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2c50: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2c60: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2c70: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2c80: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2c90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2ca0: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2cb0: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2cc0: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2cd0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ce0: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2cf0: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2d00: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2d10: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2d20: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2d30: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2d40: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2d50: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2d60: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2d70: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2d80: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2d90: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
2da0: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
2db0: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
2dc0: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
2dd0: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
2de0: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
2df0: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
2e00: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
2e10: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
2e20: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
2e30: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
2e40: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
2e50: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
2e60: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
2e70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
2e80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2e90: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
2ea0: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
2eb0: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
2ec0: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
2ed0: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
2ee0: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
2ef0: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
2f00: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
2f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2f20: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2f30: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2f40: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
2f50: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
2f60: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
2f70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
2f80: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
2f90: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
2fa0: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
2fb0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2fc0: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
2fd0: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
2fe0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2ff0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3000: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3010: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3020: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3030: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
3040: 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e  he input is a in
3050: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
3060: 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69  o large.** to fi
3070: 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54  t in 32-bits.  T
3080: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
3090: 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69  d inside of vari
30a0: 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a  ous testcase().*
30b0: 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69  * macros to veri
30c0: 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20  fy that we have 
30d0: 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f  tested SQLite fo
30e0: 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70  r large-file sup
30f0: 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  port..*/.#define
3100: 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20   IS_BIG_INT(X)  
3110: 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66  (((X)&~(i64)0xff
3120: 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a  ffffff)!=0)../*.
3130: 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c  ** The macro unl
3140: 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e  ikely() is a hin
3150: 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73  t that surrounds
3160: 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78   a boolean.** ex
3170: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3180: 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20   usually false. 
3190: 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20   Macro likely() 
31a0: 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62  surrounds.** a b
31b0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
31c0: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
31d0: 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68  y true.  These h
31e0: 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69  ints could,.** i
31f0: 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65  n theory, be use
3200: 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  d by the compile
3210: 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65  r to generate be
3220: 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a  tter code, but.*
3230: 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79  * currently they
3240: 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e   are just commen
3250: 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61  ts for human rea
3260: 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ders..*/.#define
3270: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58   likely(X)    (X
3280: 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  ).#define unlike
3290: 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63  ly(X)  (X)..#inc
32a0: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
32b0: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
32c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
32d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
32e0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
32f0: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
3300: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
3310: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
3320: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
3330: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
3340: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
3350: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
3360: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
3370: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
3380: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
3390: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
33a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
33b0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
33c0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
33d0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
33e0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
33f0: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
3410: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
3420: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3430: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
3440: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
3450: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
3460: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
3470: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3480: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
3490: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
34a0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
34b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
34c0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
34d0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
34e0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
34f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3500: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3520: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
3530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
3540: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
3550: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
3560: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
3570: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
3580: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
3590: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
35a0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
35b0: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
35c0: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
35d0: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
35e0: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
35f0: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
3600: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
3610: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
3620: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
3630: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
3640: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3650: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3660: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
3670: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
3680: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
3690: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
36a0: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
36b0: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
36c0: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
36e0: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
36f0: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
3700: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
3710: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
3720: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
3730: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
3740: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
3750: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
3760: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
3770: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
3780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3790: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
37a0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
37b0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
37c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
37d0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
37e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
37f0: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
3800: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
3810: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
3820: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
3830: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
3840: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3850: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
3860: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3880: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
3890: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
38a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
38b0: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
38c0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
38d0: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
38e0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
38f0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
3900: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
3910: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3930: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
3940: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
3950: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
3960: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
3970: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
3980: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3990: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
39a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
39b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
39c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
39d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
39e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
39f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3a00: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3a10: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3a20: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
3a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
3a40: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
3a50: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
3a60: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
3a70: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rs..*/.#define M
3a80: 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29  IN(A,B) ((A)<(B)
3a90: 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e  ?(A):(B)).#defin
3aa0: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
3ab0: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a  (B)?(A):(B))../*
3ac0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ad0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
3ae0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
3af0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
3b00: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
3b10: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
3b20: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
3b30: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
3b40: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
3b50: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
3b60: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
3b70: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
3b80: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
3b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
3ba0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
3bb0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
3bc0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
3bd0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
3be0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
3bf0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
3c00: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
3c10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
3c20: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
3c30: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
3c40: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
3c50: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
3c60: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
3c70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
3c80: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
3c90: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
3ca0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
3cb0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
3cc0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
3cd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
3ce0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
3cf0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3d00: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
3d10: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
3d20: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3d30: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
3d40: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
3d50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3d60: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
3d70: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3d80: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
3d90: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
3da0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3db0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
3dc0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
3dd0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3de0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
3df0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
3e00: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3e10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3e20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
3e30: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
3e40: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
3e50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3e60: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
3e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e80: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
3e90: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
3ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
3eb0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3ec0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
3ed0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
3ee0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
3ef0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
3f00: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
3f10: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3f20: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
3f30: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
3f40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
3f50: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
3f60: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
3f70: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
3f80: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
3f90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3fa0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3fb0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
3fc0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
3fd0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3fe0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
3ff0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4000: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4010: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4020: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4030: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4040: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4050: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4060: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4070: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
4080: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
4090: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
40a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
40b0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
40c0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
40d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
40e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
40f0: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4100: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4120: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4130: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4140: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4150: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4160: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4170: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
4180: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
4190: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
41a0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
41b0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
41c0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
41d0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
41e0: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
41f0: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4200: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4210: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4220: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4240: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4250: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4260: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4270: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
4280: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
42a0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
42b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
42c0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
42d0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
42e0: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
42f0: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4300: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4310: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4320: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4330: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4340: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4350: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4360: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4370: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
4380: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
4390: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
43a0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
43b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
43c0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
43d0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
43e0: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
43f0: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4400: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4410: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4420: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4430: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4440: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4450: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4460: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4470: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
4480: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
4490: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
44a0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
44b0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
44c0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
44d0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
44e0: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
44f0: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4500: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4510: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4520: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4530: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4540: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4550: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4560: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4570: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4580: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74  e LogEst quantat
4590: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
45a0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
45b0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
45c0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
45d0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
45e0: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
45f0: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4600: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4610: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4620: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4630: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4640: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4650: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4660: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4670: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4680: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4690: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
46a0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
46b0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
46c0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
46d0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
46e0: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
46f0: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4700: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4710: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4720: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4730: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4740: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4750: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4760: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4770: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4780: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4790: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
47a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
47b0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
47c0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
47d0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
47e0: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
47f0: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4800: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
4810: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
4820: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
4830: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
4840: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
4850: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
4860: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
4870: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
4880: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
4890: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
48a0: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
48b0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
48c0: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
48d0: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
48e0: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
48f0: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
4900: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
4910: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
4920: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4930: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
4940: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
4950: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
4960: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
4970: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4980: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4990: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
49a0: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
49b0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
49c0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
49d0: 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29  f (defined(i386)
49e0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
49f0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
4a00: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
4a10: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
4a20: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
4a30: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
4a40: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
4a50: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
4a60: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
4a70: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
4a80: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
4a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
4aa0: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
4ab0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
4ac0: 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  )) && !defined(S
4ad0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
4ae0: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
4af0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
4b00: 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66  ER    1234.# def
4b10: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
4b20: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
4b30: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
4b40: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
4b50: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
4b60: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
4b70: 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16LE.#endif.#if 
4b80: 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20  (defined(sparc) 
4b90: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4ba0: 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26  ppc__))  \.    &
4bb0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
4bc0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4bd0: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
4be0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
4bf0: 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20    4321.# define 
4c00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4c10: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
4c20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
4c30: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
4c40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4c50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
4c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45  ined(SQLITE_BYTE
4c80: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
4c90: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
4ca0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d      0     /* 0 m
4cb0: 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74  eans "unknown at
4cc0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a   compile-time" *
4cd0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
4ce0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
4cf0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
4d00: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
4d10: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
4d20: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
4d30: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
4d40: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
4d50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4d60: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4d70: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4d80: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4d90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4da0: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4db0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4dc0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4dd0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4de0: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4df0: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
4e00: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
4e10: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
4e20: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
4e30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
4e40: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
4e50: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4e60: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4e70: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4e80: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4e90: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4ea0: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4eb0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4ec0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4ed0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4ee0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4ef0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
4f00: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
4f10: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
4f20: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
4f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4f40: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
4f50: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4f60: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4f70: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4f80: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4f90: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4fa0: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4fb0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4fc0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4fd0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4fe0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4ff0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
5000: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
5010: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
5020: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
5030: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
5040: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
5050: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
5060: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
5070: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
5080: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
5090: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
50a0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
50b0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
50c0: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
50d0: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
50e0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
50f0: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
5100: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
5110: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
5120: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
5130: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5140: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
5150: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
5160: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
5170: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
5180: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
5190: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
51a0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
51b0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
51c0: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
51d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
51e0: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
51f0: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
5200: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
5210: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
5220: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
5230: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
5240: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
5250: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5260: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
5270: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5280: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
5290: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
52a0: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
52b0: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
52c0: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
52d0: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
52e0: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
52f0: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
5300: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
5310: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
5320: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
5330: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5340: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
5350: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5360: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
5370: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
5380: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
5390: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
53a0: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
53b0: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
53c0: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
53d0: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
53e0: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
53f0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
5400: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
5410: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5420: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
5430: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
5440: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
5450: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5460: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
5470: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
5480: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5490: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
54a0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
54b0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
54c0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
54d0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
54e0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
54f0: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
5500: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
5510: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
5520: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
5530: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
5540: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
5550: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
5560: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
5570: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
5580: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5590: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
55c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
55d0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
55e0: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
55f0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5600: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
5610: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5620: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
5630: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
5640: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5650: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
5660: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5670: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
5680: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
56a0: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
56b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
56c0: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
56d0: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
56e0: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
56f0: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
5700: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5710: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
5720: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
5730: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
5740: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5750: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
5760: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5770: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
5780: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5790: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
57a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
57b0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
57c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
57d0: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
57e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
57f0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
5800: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5810: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
5820: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
5830: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5840: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
5850: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5870: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5880: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5890: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
58a0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
58b0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
58c0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
58d0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
58e0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
58f0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5900: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5910: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5920: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5930: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5940: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5950: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5960: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5970: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5980: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5990: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
59a0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
59b0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
59c0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
59d0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
59e0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
59f0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5a00: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5a10: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5a20: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5a30: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5a40: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5a50: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5a60: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5a70: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5a80: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5a90: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5aa0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5ab0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5ac0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5ad0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5ae0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5af0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5b00: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5b10: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
5b20: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
5b30: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
5b40: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
5b50: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5b60: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5b70: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5b80: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5b90: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5ba0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5bb0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5bc0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5bd0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5be0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5bf0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
5c00: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
5c10: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
5c20: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
5c30: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
5c40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
5c50: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5c60: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5c70: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5c80: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5c90: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5ca0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5cb0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5cc0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5cd0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5ce0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5cf0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
5d00: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
5d10: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
5d20: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
5d30: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
5d40: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
5d50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5d60: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5d70: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5d80: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5d90: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5da0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5db0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5dc0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5dd0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5de0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5df0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
5e00: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
5e10: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
5e20: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
5e30: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
5e40: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
5e50: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5e60: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5e70: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5e80: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5e90: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5ea0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5eb0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5ec0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5ed0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5ee0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5ef0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
5f00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5f10: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
5f20: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
5f30: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
5f40: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
5f50: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5f60: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5f70: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5f80: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5f90: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5fa0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5fb0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5fc0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5fd0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5fe0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5ff0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6000: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6010: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6020: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6030: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6040: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6050: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6060: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6070: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6080: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6090: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
60a0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
60b0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
60c0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
60d0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
60e0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
60f0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
6100: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
6110: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6120: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6130: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6140: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6150: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6160: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6170: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6180: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6190: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
61a0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
61b0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
61c0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
61d0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
61e0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
61f0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
6200: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
6210: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6220: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6230: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6240: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6250: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6260: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6280: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6290: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
62a0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
62b0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
62c0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
62d0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
62e0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
62f0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
6300: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
6310: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6320: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6330: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6340: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6350: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6360: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6370: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6380: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6390: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
63a0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
63b0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
63c0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
63d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
63e0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
63f0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
6400: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
6410: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6420: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6430: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6440: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6450: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6460: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6470: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6480: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6490: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
64a0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
64b0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
64c0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
64d0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
64e0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
64f0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
6500: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
6510: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6520: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6530: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6540: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6550: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6560: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6570: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6580: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6590: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
65a0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
65b0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
65c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
65d0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
65e0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
65f0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6600: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6610: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6620: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6630: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6640: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6650: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6660: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6670: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6680: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6690: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
66a0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
66b0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
66c0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
66d0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
66e0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
66f0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6700: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6710: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6720: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6730: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6740: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6750: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6760: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6770: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6780: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6790: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
67a0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
67b0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
67c0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
67d0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
67e0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
67f0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6800: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6810: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6820: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6830: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6840: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6850: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6860: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6870: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6880: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6890: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
68a0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
68b0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
68c0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
68d0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
68e0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
68f0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6900: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6910: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6920: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6930: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6940: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6950: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6960: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6970: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6980: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
69a0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
69b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69c0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
69d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69e0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
69f0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6a00: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6a10: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6a20: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6a40: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6a50: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6a60: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6a70: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6a80: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6a90: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6aa0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6ab0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6ac0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6ad0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6ae0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6af0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6b00: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6b10: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
6b20: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
6b30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6b40: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
6b50: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
6b60: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
6b70: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
6b80: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6b90: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6ba0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6bb0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6bc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6bd0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6be0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6bf0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
6c00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c10: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
6c20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c30: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
6c40: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
6c50: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
6c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c70: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
6c80: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6c90: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6ca0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cb0: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6cc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cd0: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6ce0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6cf0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
6d00: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
6d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
6d20: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
6d30: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
6d40: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
6d50: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
6d60: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
6d70: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
6d80: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6d90: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6da0: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6db0: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
6dc0: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
6dd0: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
6de0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
6df0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
6e00: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
6e10: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
6e20: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
6e30: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
6e40: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
6e50: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
6e60: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
6e70: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
6e80: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
6e90: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
6ea0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
6eb0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
6ec0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
6ed0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
6ee0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
6ef0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
6f00: 0a 2f 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 61  ./* When using a
6f10: 20 64 65 66 61 75 6c 74 20 77 61 6c 20 73 61 66   default wal saf
6f20: 65 74 79 20 6c 65 76 65 6c 2c 20 74 68 65 20 73  ety level, the s
6f30: 61 66 65 74 79 20 6c 65 76 65 6c 20 73 68 6f 75  afety level shou
6f40: 6c 64 20 6f 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e  ld only .** chan
6f50: 67 65 20 77 69 74 68 20 74 68 65 20 6a 6f 75 72  ge with the jour
6f60: 6e 61 6c 20 6d 6f 64 65 20 69 66 20 74 68 65 20  nal mode if the 
6f70: 75 73 65 72 20 68 61 73 6e 27 74 20 6d 61 6e 75  user hasn't manu
6f80: 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20 0a  ally specified .
6f90: 2a 2a 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72  ** pragma synchr
6fa0: 6f 6e 6f 75 73 2c 20 69 66 20 74 68 65 79 20 68  onous, if they h
6fb0: 61 76 65 20 74 68 65 20 64 65 66 61 75 6c 74 73  ave the defaults
6fc0: 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20 61 70   shouldn't be ap
6fd0: 70 6c 69 65 64 2e 0a 2a 2a 20 54 68 65 20 53 51  plied..** The SQ
6fe0: 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c  LITE_SAFETYLEVEL
6ff0: 5f 46 49 58 45 44 20 76 61 6c 75 65 20 69 73 20  _FIXED value is 
7000: 4f 52 65 64 20 69 6e 74 6f 20 74 68 65 20 44 62  ORed into the Db
7010: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 2a  ->safety_level.*
7020: 2a 20 66 69 65 6c 64 20 77 68 65 6e 20 74 68 65  * field when the
7030: 20 75 73 65 72 20 68 61 73 20 73 70 65 63 69 66   user has specif
7040: 69 65 64 20 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ied a synchronou
7050: 73 20 73 65 74 74 69 6e 67 20 76 69 61 20 70 72  s setting via pr
7060: 61 67 6d 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  agma..*/.#define
7070: 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45   SQLITE_SAFETYLE
7080: 56 45 4c 5f 46 49 58 45 44 20 30 78 31 30 0a 23  VEL_FIXED 0x10.#
7090: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 41  define SQLITE_SA
70a0: 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f  FETYLEVEL_VALUE_
70b0: 4d 41 53 4b 20 30 78 30 33 0a 23 64 65 66 69 6e  MASK 0x03.#defin
70c0: 65 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74  e SQLITE_DbSafet
70d0: 79 4c 65 76 65 6c 56 61 6c 75 65 28 6c 65 76 65  yLevelValue(leve
70e0: 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54 45  l) (level&SQLITE
70f0: 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c  _SAFETYLEVEL_VAL
7100: 55 45 5f 4d 41 53 4b 29 0a 23 64 65 66 69 6e 65  UE_MASK).#define
7110: 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79   SQLITE_DbSafety
7120: 4c 65 76 65 6c 49 73 46 69 78 65 64 28 6c 65 76  LevelIsFixed(lev
7130: 65 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54  el) (level&SQLIT
7140: 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49  E_SAFETYLEVEL_FI
7150: 58 45 44 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  XED)../*.** Each
7160: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
7170: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
7180: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
7190: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
71a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
71b0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
71c0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
71d0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
71e0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
71f0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7200: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7210: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7220: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
7230: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
7240: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
7250: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
7260: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
7270: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7280: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
7290: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
72a0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
72b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
72c0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
72d0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
72e0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
72f0: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7300: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7310: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
7320: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
7330: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
7340: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
7350: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
7360: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
7370: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7380: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
7390: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
73a0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
73b0: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
73c0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
73d0: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
73e0: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
73f0: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7400: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7410: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
7420: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
7430: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
7440: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
7450: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
7460: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
7470: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7480: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
7490: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
74a0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
74b0: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
74c0: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
74d0: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
74e0: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
74f0: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7500: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7510: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
7520: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
7530: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
7540: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
7550: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
7560: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
7570: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7580: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
7590: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
75a0: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
75b0: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
75c0: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
75d0: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
75e0: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
75f0: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7600: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7610: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
7620: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
7630: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
7640: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
7650: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7660: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
7670: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7680: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
7690: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
76a0: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
76b0: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
76c0: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
76d0: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
76e0: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
76f0: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7700: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7710: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
7720: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
7730: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
7740: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
7750: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
7760: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7770: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7780: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
7790: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
77a0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
77b0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
77c0: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
77d0: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
77e0: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
77f0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7800: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7810: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7820: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7830: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7840: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7850: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7860: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7870: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7880: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
7890: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
78a0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
78b0: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
78c0: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
78d0: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
78e0: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
78f0: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7900: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7910: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7920: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7930: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7940: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7950: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
7960: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7970: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7980: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7990: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
79a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
79b0: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
79c0: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
79d0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
79e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
79f0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7a00: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7a10: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7a20: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7a30: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7a40: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7a50: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7a60: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
7a70: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
7a80: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
7a90: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
7aa0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7ab0: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
7ac0: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
7ad0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7ae0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
7af0: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
7b00: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
7b10: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
7b20: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
7b30: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
7b40: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
7b50: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
7b60: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
7b70: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
7b80: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
7b90: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
7ba0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
7bb0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
7bc0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
7bd0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
7be0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
7bf0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
7c00: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
7c10: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
7c20: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
7c30: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
7c40: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
7c50: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
7c60: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
7c70: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
7c80: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
7c90: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
7ca0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
7cb0: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
7cc0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
7cd0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
7ce0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
7cf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
7d00: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
7d10: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
7d20: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
7d30: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
7d40: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
7d50: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
7d60: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
7d70: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
7d80: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
7d90: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
7da0: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
7db0: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
7dc0: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
7dd0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
7de0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
7df0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
7e00: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
7e10: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
7e20: 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29  TRIGGER_DEPTH+1)
7e30: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
7e40: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
7e50: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
7e60: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
7e70: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
7e80: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
7e90: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
7ea0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
7eb0: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
7ec0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7ed0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
7ee0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7ef0: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
7f00: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
7f10: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
7f20: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
7f30: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
7f40: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
7f50: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
7f60: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
7f70: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
7f80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
7f90: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
7fa0: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
7fb0: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
7fc0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
7fd0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
7fe0: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
7ff0: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
8000: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
8010: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
8020: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
8030: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
8040: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
8050: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
8060: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
8070: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
8080: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
8090: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
80a0: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
80b0: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
80c0: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
80d0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
80e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
80f0: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
8100: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
8110: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
8120: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
8130: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
8140: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
8150: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8160: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
8170: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
8180: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
8190: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
81a0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
81b0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
81c0: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
81d0: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
81e0: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
81f0: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
8200: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
8210: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
8220: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
8230: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
8240: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
8250: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
8260: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
8270: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
8280: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
8290: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
82a0: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
82b0: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
82c0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
82d0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
82e0: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
82f0: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
8300: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
8310: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
8320: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8340: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
8350: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
8360: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
8370: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
8380: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
8390: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
83a0: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61  t */.  int anSta
83b0: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
83c0: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
83d0: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
83e0: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
83f0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
8400: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
8410: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
8420: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
8430: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
8440: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
8450: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
8460: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
8470: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
8480: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8490: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
84a0: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
84b0: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
84c0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
84d0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
84e0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
84f0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
8500: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
8510: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
8520: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
8530: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  or function defi
8540: 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48  nitions..**.** H
8550: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
8560: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
8570: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
8580: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
8590: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
85a0: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
85b0: 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  ef.pHash chain..
85c0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
85d0: 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65  fHash {.  FuncDe
85e0: 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20  f *a[23];       
85f0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
8600: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
8610: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  ;../*.** Each da
8620: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8630: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
8640: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8650: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
8660: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
8670: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
8680: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
8690: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
86a0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
86b0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
86c0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
86d0: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
86e0: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
86f0: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
8700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
8710: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
8720: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
8730: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
8740: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
8750: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
8760: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
8770: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8790: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
87a0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
87d0: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
87e0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
87f0: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
8800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
8810: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
8820: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
8830: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
8840: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8850: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
8860: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
8870: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
8880: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
88a0: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
88b0: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
88c0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
88d0: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
88e0: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
88f0: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
8900: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
8910: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
8920: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8930: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
8940: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
8950: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
8960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8970: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
8980: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
8990: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
89a0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
89b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
89c0: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
89d0: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
89e0: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
89f0: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8a10: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
8a20: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
8a30: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
8a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
8a50: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
8a60: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
8a70: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8a90: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
8aa0: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
8ab0: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
8ac0: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
8ad0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
8ae0: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
8af0: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
8b00: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
8b10: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
8b20: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
8b30: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
8b40: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
8b50: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8b70: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
8b80: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
8b90: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
8ba0: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
8bb0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
8bc0: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
8bd0: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
8be0: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
8bf0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
8c00: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
8c10: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
8c20: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
8c30: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
8c40: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
8c50: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
8c60: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
8c70: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
8c80: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
8c90: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
8ca0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
8cb0: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
8cc0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
8cd0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
8ce0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
8cf0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
8d00: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
8d10: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
8d20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
8d30: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
8d40: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
8d50: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
8d60: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
8d70: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
8d80: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74  * Limits */.  st
8d90: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
8da0: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
8db0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
8dc0: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
8dd0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
8de0: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
8df0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
8e00: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
8e10: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
8e20: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
8e50: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
8e60: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
8e70: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8e90: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
8ea0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
8eb0: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
8ec0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
8ed0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
8ee0: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
8ef0: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
8f00: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
8f10: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
8f20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8f30: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
8f40: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
8f50: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
8f60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8f70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8f80: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8f90: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
8fa0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
8fb0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8fc0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8fd0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8fe0: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
8ff0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
9000: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9010: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
9020: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
9030: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
9040: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9060: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
9070: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
9080: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
9090: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
90a0: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
90b0: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
90c0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
90d0: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
90e0: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
90f0: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
9100: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
9110: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
9140: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
9150: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
9160: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
9170: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
9180: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
9190: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
91a0: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
91d0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
91e0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
91f0: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9210: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
9220: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
9230: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
9240: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
9250: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
9260: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
9270: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
9280: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
92b0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
92c0: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
92d0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
92e0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
92f0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
9300: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
9310: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
9320: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
9330: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
9340: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
9350: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
9360: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66  _int64);.#ifndef
9370: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
9380: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
9390: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
93a0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
93b0: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
93c0: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
93d0: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
93e0: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
93f0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
9400: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
9410: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
9420: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
9430: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
9440: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
9450: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
9460: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
9470: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
9480: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
9490: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
94a0: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
94b0: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
94c0: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
94d0: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
94e0: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
94f0: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
9500: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
9510: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
9520: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
9530: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
9540: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
9550: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
9560: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
9570: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
9580: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9590: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
95a0: 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74  ION.  int (*xAut
95b0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
95c0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
95d0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
95e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9610: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
9620: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
9630: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
9640: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9650: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
9660: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
9670: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
9680: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9690: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
96a0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
96b0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
96c0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
96d0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
96e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
96f0: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
9700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9710: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
9720: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
9730: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
9740: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
9750: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9760: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
9770: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9780: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9790: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
97a0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
97b0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
97c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
97d0: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
97e0: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
97f0: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
9800: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
9810: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
9820: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
9830: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
9840: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
9850: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
9860: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
9870: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
9880: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
9890: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
98a0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
98b0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
98c0: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
98d0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
98e0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
98f0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
9900: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
9910: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
9920: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
9930: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
9940: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
9950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
9960: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
9970: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
9980: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
9990: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
99a0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
99b0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
99c0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
99d0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
99e0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
99f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
9a00: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
9a10: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
9a20: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
9a30: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
9a40: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
9a50: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
9a60: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
9a70: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
9a80: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
9a90: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
9aa0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
9ab0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ad0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
9ae0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
9af0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
9b00: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
9b10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9b20: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
9b30: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
9b40: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
9b50: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
9b60: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
9b70: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
9b80: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
9b90: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
9ba0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
9bb0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
9bc0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
9bd0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
9be0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
9bf0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
9c00: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
9c10: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
9c20: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23  n DbFree() */..#
9c30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
9c40: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
9c50: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
9c60: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
9c70: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
9c80: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
9c90: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
9ca0: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
9cb0: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
9cc0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
9cd0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
9ce0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
9cf0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
9d00: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
9d10: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
9d20: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
9d30: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
9d40: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
9d50: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
9d60: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
9d70: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
9d80: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
9d90: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
9da0: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
9db0: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
9dc0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
9dd0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
9de0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
9df0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
9e00: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
9e10: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
9e20: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
9e30: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
9e40: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
9e50: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
9e60: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
9e70: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
9e80: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
9e90: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
9ea0: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ec0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
9ed0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
9ee0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
9ef0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
9f00: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
9f10: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
9f20: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
9f30: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
9f40: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
9f50: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
9f60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
9f70: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
9f80: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
9f90: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
9fa0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
9fb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
9fc0: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
9fd0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
9fe0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
9ff0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
a000: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
a010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a020: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
a030: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
a040: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
a050: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
a060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
a070: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
a080: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
a090: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
a0a0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
a0b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
a0c0: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
a0d0: 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75  00004  /* Use fu
a0e0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
a0f0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
a100: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
a110: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
a120: 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  008  /* Use full
a130: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
a140: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
a150: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
a160: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 31  ll     0x0000001
a170: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
a180: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
a190: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a1a0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
a1b0: 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68  x00000020  /* Sh
a1c0: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
a1d0: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
a1e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a1f0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
a200: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
a210: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
a220: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
a230: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
a240: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
a250: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
a260: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
a270: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2a0: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
a2b0: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
a2c0: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
a300: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
a310: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
a320: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
a330: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
a340: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
a350: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
a360: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a390: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
a3a0: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
a3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
a3c0: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
a3d0: 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0200  /* Debug p
a3e0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
a3f0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
a400: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
a410: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
a420: 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  400  /* Debug li
a430: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
a440: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
a450: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
a460: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
a470: 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  800  /* OK to up
a480: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
a490: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
a4a0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
a4b0: 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20  ace 0x00001000  
a4c0: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
a4d0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
a4e0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
a4f0: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
a500: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
a510: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
a520: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
a530: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
a540: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
a550: 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20  tted 0x0004000  
a560: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
a570: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
a580: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
a590: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
a5a0: 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  8000  /* Create 
a5b0: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
a5c0: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
a5d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
a5e0: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
a5f0: 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  10000  /* Ignore
a600: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
a610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a620: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
a630: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52  0x00020000  /* R
a640: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
a650: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
a660: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
a670: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34  iggers    0x0004
a680: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
a690: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
a6a0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
a6b0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
a6c0: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
a6d0: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
a6e0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a6f0: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
a700: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
a710: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
a720: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
a730: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
a740: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
a750: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
a760: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00200000  /* Pre
a770: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
a780: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
a790: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
a7a0: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34  Extension  0x004
a7b0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
a7c0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
a7d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a7e0: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
a7f0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
a800: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
a810: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
a820: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
a830: 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30 30  Ks       0x01000
a840: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
a850: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
a860: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a870: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
a880: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
a890: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
a8a0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
a8b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
a8c0: 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34 30  EQP        0x040
a8d0: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
a8e0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
a8f0: 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  AN */.../*.** Bi
a900: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
a910: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
a920: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
a930: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
a940: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
a950: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
a960: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
a970: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
a980: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
a990: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
a9a0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
a9b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a9c0: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
a9d0: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
a9e0: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
a9f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
aa00: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
aa10: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
aa20: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
aa30: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
aa40: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
aa50: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
aa60: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
aa70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
aa80: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
aa90: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
aaa0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
aab0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
aac0: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
aad0: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
aae0: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
aaf0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
ab00: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
ab10: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
ab20: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
ab30: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
ab40: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
ab50: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
ab60: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
ab70: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
ab80: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
ab90: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
aba0: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
abb0: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
abc0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
abd0: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
abe0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
abf0: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
ac00: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
ac10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ac20: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
ac30: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
ac40: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
ac50: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
ac60: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
ac70: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
ac80: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
ac90: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
aca0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
acb0: 74 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78  tat3          0x
acc0: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68  0800   /* Use th
acd0: 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74  e SQLITE_STAT3 t
ace0: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
acf0: 53 51 4c 49 54 45 5f 41 64 6a 75 73 74 4f 75 74  SQLITE_AdjustOut
ad00: 45 73 74 20 20 20 30 78 31 30 30 30 20 20 20 2f  Est   0x1000   /
ad10: 2a 20 41 64 6a 75 73 74 20 6f 75 74 70 75 74 20  * Adjust output 
ad20: 65 73 74 69 6d 61 74 65 73 20 75 73 69 6e 67 20  estimates using 
ad30: 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
ad40: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
ad50: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
ad60: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
ad70: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
ad80: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
ad90: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
ada0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
adb0: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
adc0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  sabled..*/.#ifnd
add0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
ade0: 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66  UILTIN_TEST.#def
adf0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
ae00: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
ae10: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
ae20: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
ae30: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
ae40: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
ae50: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
ae60: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
ae70: 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ask))==0).#else.
ae80: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
ae90: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
aea0: 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e   mask)  0.#defin
aeb0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
aec0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
aed0: 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    1.#endif../*.*
aee0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
aef0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
af00: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
af10: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
af20: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
af30: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
af40: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
af50: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
af60: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
af70: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
af80: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
af90: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
afa0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
afb0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
afc0: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
afd0: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
afe0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
aff0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
b000: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
b010: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
b020: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
b030: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
b040: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
b050: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
b060: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
b070: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
b080: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
b090: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
b0a0: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
b0b0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
b0c0: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
b0d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b0e0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
b0f0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
b100: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
b110: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b120: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
b130: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
b140: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
b150: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
b160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b170: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
b180: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
b190: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
b1a0: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
b1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b1c0: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
b1d0: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
b1e0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
b1f0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
b200: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
b210: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
b220: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
b230: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b240: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
b250: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
b260: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
b270: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
b280: 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61  lite.aFunc.** ha
b290: 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20  sh table.  When 
b2a0: 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f  multiple functio
b2b0: 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ns have the same
b2c0: 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20   name, the hash 
b2d0: 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20  table.** points 
b2e0: 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  to a linked list
b2f0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
b300: 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ures..*/.struct 
b310: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20  FuncDef {.  i16 
b320: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
b330: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
b340: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
b350: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
b360: 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b    u16 funcFlags;
b370: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
b380: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
b390: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
b3a0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
b3b0: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
b3c0: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
b3d0: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
b3e0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
b3f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
b400: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
b410: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
b420: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b430: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b440: 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63   /* Regular func
b450: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
b460: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
b470: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
b480: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
b490: 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70  * Aggregate step
b4a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
b4b0: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
b4c0: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
b4e0: 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72  regate finalizer
b4f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
b500: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
b510: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
b520: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e  nction. */.  Fun
b530: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
b540: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
b550: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
b560: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
b570: 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72  h */.  FuncDestr
b580: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
b590: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
b5a0: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
b5b0: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
b5c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
b5d0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
b5e0: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
b5f0: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
b600: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
b610: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
b620: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
b630: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
b640: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
b650: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
b660: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
b670: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
b680: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
b690: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
b6a0: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
b6b0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
b6c0: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
b6d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
b6e0: 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a  Ref is set to .*
b6f0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
b700: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
b710: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
b720: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
b730: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
b740: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
b750: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
b760: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
b770: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
b780: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
b790: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
b7a0: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
b7b0: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
b7c0: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
b7d0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
b7e0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
b7f0: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
b800: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
b810: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
b820: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
b830: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
b840: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
b850: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
b860: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
b870: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
b880: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
b890: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
b8a0: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
b8b0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
b8c0: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
b8d0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
b8e0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
b8f0: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
b900: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
b910: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
b920: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
b930: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
b940: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
b950: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
b960: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
b970: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
b980: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
b990: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68  G_TYPEOFARG.  Th
b9a0: 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72  ere.** are asser
b9b0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
b9c0: 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65  n the code to ve
b9d0: 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64  rify this..*/.#d
b9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b9f0: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33  C_ENCMASK  0x003
ba00: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
ba10: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
ba20: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
ba30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ba40: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34  C_LIKE     0x004
ba50: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
ba60: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
ba70: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ba80: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
ba90: 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a  ASE     0x008 /*
baa0: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
bab0: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
bac0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
bad0: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
bae0: 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65     0x010 /* Ephe
baf0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
bb00: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
bb10: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
bb20: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f  NEEDCOLL 0x020 /
bb30: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
bb40: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
bb50: 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65  be called */.#de
bb60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
bb70: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30 20  _LENGTH   0x040 
bb80: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
bb90: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
bba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bbb0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
bbc0: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
bbd0: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
bbe0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
bbf0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
bc00: 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74    0x100 /* Built
bc10: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
bc20: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
bc30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
bc40: 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20  ALESCE 0x200 /* 
bc50: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
bc60: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
bc70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc80: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
bc90: 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x400 /* Built-i
bca0: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
bcb0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
bcc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
bcd0: 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43  STANT 0x800 /* C
bce0: 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
bcf0: 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
bd00: 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  utput */../*.** 
bd10: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
bd20: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
bd30: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
bd40: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
bd50: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
bd60: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
bd70: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
bd80: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
bd90: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
bda0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
bdb0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
bdc0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
bdd0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
bde0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
bdf0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
be00: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
be10: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
be20: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
be30: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
be40: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
be50: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
be60: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
be70: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
be80: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
be90: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
bea0: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
beb0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
bec0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
bed0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
bee0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
bef0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
bf00: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
bf10: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
bf20: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
bf30: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
bf40: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
bf50: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
bf60: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
bf70: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
bf80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
bf90: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
bfa0: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
bfb0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
bfc0: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
bfd0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
bfe0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
bff0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c000: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
c010: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
c020: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
c030: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
c040: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
c050: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
c060: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
c070: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c080: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
c090: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
c0a0: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
c0b0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
c0c0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c0d0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
c0e0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c0f0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c100: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c110: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c120: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
c130: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
c140: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
c150: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
c160: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
c170: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
c180: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
c190: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
c1a0: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
c1b0: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
c1c0: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
c1d0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
c1e0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
c1f0: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
c200: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
c210: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
c220: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
c230: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
c240: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
c250: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
c260: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
c270: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
c280: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
c290: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c2a0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c2b0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c2c0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c2d0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c2e0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c2f0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c300: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c310: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
c320: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c330: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
c340: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
c350: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c360: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c370: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c380: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c390: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c3a0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c3b0: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
c3c0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c3d0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
c3e0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
c3f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c400: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c410: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c420: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
c430: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
c440: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
c450: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
c460: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
c470: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
c480: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c490: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
c4a0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
c4b0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
c4c0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
c4d0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
c4e0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
c4f0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
c500: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
c510: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
c520: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
c530: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
c540: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
c550: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c560: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
c570: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
c580: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
c590: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
c5a0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
c5b0: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
c5c0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
c5d0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
c5e0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
c5f0: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
c600: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
c610: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
c620: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
c630: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
c640: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a  ,#zName,0,0}../*
c650: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
c660: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
c670: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
c680: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
c690: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
c6a0: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
c6b0: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
c6c0: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
c6d0: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
c6e0: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
c6f0: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
c700: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
c710: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
c720: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
c730: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
c740: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
c750: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
c780: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
c790: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
c7a0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
c7b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c7c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c7d0: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
c7e0: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
c7f0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
c800: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c810: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
c820: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
c830: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
c840: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
c850: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
c860: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
c870: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
c880: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
c890: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
c8a0: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
c8b0: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
c8c0: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
c8d0: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
c8e0: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
c8f0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
c900: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
c910: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
c920: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
c930: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
c940: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
c950: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
c960: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
c970: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
c980: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
c990: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
c9a0: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
c9b0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
c9c0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
c9d0: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
c9e0: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
c9f0: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
ca00: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
ca10: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
ca20: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
ca30: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
ca40: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
ca50: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
ca60: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
ca70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
ca80: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
ca90: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
caa0: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
cad0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
cae0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
caf0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
cb00: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
cb10: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
cb20: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
cb30: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
cb40: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
cb50: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
cb60: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
cb70: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
cb80: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
cb90: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
cba0: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
cbb0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
cbc0: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
cbd0: 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  mn */.  Expr *pD
cbe0: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
cbf0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
cc00: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
cc10: 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f  ar *zDflt;     /
cc20: 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
cc30: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  of the default v
cc40: 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  alue */.  char *
cc50: 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61  zType;     /* Da
cc60: 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73  ta type for this
cc70: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
cc80: 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
cc90: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
cca0: 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
ccb0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
ccc0: 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
ccd0: 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
cce0: 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
ccf0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
cd00: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
cd10: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
cd20: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
cd30: 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
cd40: 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
cd50: 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
cd60: 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73  ted size of this
cd70: 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31   column.  INT==1
cd80: 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
cd90: 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
cda0: 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
cdb0: 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
cdc0: 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
cdd0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
cde0: 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
cdf0: 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
ce00: 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
ce10: 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
ce20: 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
ce30: 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
ce40: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
ce50: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
ce60: 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
ce70: 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
ce80: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
ce90: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
cea0: 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
ceb0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
cec0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ced0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
cee0: 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
cef0: 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
cf00: 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
cf10: 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
cf20: 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
cf30: 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
cf40: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
cf50: 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
cf60: 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
cf70: 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
cf80: 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
cf90: 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
cfa0: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
cfb0: 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
cfc0: 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
cfd0: 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
cfe0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
cff0: 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
d000: 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
d010: 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
d020: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d030: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
d040: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
d050: 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
d060: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
d070: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
d080: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
d090: 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
d0a0: 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
d0b0: 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
d0c0: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
d0d0: 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
d0e0: 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
d0f0: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
d100: 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
d110: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
d120: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
d130: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
d140: 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
d150: 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
d160: 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
d170: 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
d180: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d190: 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
d1a0: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
d1b0: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
d1c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
d1d0: 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
d1e0: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
d1f0: 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   order */../*.**
d200: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
d210: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
d220: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
d230: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
d240: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
d250: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
d260: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
d270: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
d280: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
d290: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
d2a0: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
d2b0: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
d2c0: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
d2d0: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
d2e0: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
d2f0: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
d300: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
d310: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
d320: 20 27 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'a'.  That way,
d330: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
d340: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
d350: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
d360: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
d370: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
d380: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
d390: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
d3a0: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
d3b0: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
d3c0: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
d3d0: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
d3e0: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
d3f0: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
d400: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
d410: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
d420: 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  son..*/.#define 
d430: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
d440: 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20      'a'.#define 
d450: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
d460: 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20      'b'.#define 
d470: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d480: 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20  IC  'c'.#define 
d490: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
d4a0: 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20  ER  'd'.#define 
d4b0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
d4c0: 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65      'e'..#define
d4d0: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
d4e0: 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
d4f0: 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
d500: 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
d510: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d520: 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
d530: 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
d540: 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
d550: 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
d560: 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  . .*/.#define SQ
d570: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
d580: 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x67../*.** Ad
d590: 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
d5a0: 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
d5b0: 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
d5c0: 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
d5d0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
d5e0: 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
d5f0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
d600: 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
d610: 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
d620: 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
d630: 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
d640: 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
d650: 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
d660: 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
d670: 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
d680: 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
d690: 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
d6a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
d6b0: 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
d6c0: 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
d6d0: 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
d6e0: 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
d6f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
d700: 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a  FNULL   0x08  /*
d710: 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
d720: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d730: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d740: 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
d750: 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x10  /* Store r
d760: 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
d770: 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
d780: 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
d790: 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
d7a0: 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
d7b0: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
d7c0: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
d7d0: 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73 73 65     0x88  /* Asse
d7e0: 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
d7f0: 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
d800: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
d810: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
d820: 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
d830: 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
d840: 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
d850: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d860: 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hema. .**.** If 
d870: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
d880: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
d890: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
d8a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
d8b0: 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
d8c0: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
d8d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
d8e0: 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
d8f0: 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
d900: 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
d910: 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
d920: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
d930: 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
d940: 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
d950: 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
d960: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
d970: 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
d980: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
d990: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
d9a0: 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
d9b0: 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
d9c0: 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
d9d0: 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73  ween .** databas
d9e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
d9f0: 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
da00: 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
da10: 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  ry database .** 
da20: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
da30: 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
da40: 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
da50: 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
da60: 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
da70: 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
da80: 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
da90: 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
daa0: 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
dab0: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
dac0: 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
dad0: 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
dae0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
daf0: 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
db00: 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
db10: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
db20: 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
db30: 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a  s real tables .*
db40: 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74  * within the dat
db50: 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74  abase. So that t
db60: 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61  hey appear as pa
db70: 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72  rt of the caller
db80: 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  s .** transactio
db90: 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
dba0: 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
dbb0: 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
dbc0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e  atabase .** conn
dbd0: 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
dbe0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
dbf0: 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
dc00: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
dc10: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
dc20: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
dc30: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
dc40: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
dc50: 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
dc60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
dc70: 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
dc80: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
dc90: 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
dca0: 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
dcb0: 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
dcc0: 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
dcd0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
dce0: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
dcf0: 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
dd00: 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
dd10: 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
dd20: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
dd30: 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
dd40: 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
dd50: 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
dd60: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
dd70: 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
dd80: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
dd90: 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
dda0: 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
ddb0: 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
ddc0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
ddd0: 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
dde0: 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
ddf0: 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
de00: 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
de10: 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
de20: 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
de30: 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
de40: 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
de50: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
de60: 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
de70: 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64  ts are not .** d
de80: 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
de90: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
dea0: 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
deb0: 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a  sconnect()ed .**
dec0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
ded0: 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
dee0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
def0: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
df00: 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
df10: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
df20: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
df30: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
df40: 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
df50: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
df60: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
df70: 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
df80: 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
df90: 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  ted .** next tim
dfa0: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
dfb0: 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
dfc0: 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
dfd0: 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
dfe0: 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
dff0: 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
e000: 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
e010: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
e020: 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
e030: 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
e040: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
e050: 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
e060: 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
e070: 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
e080: 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
e090: 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
e0a0: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
e0b0: 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
e0c0: 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
e0d0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
e0e0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
e0f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
e100: 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
e110: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
e120: 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
e130: 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62  by .** sqlite3Db
e140: 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
e150: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
e160: 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
e170: 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a  VTable.db as .**
e180: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
e190: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
e1a0: 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
e1b0: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
e1c0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
e1d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
e1e0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
e1f0: 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
e200: 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
e210: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
e220: 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
e230: 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
e240: 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
e250: 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
e260: 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
e270: 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
e280: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
e290: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e2a0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
e2b0: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
e2c0: 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
e2d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
e2e0: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
e2f0: 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
e300: 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
e310: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
e320: 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
e330: 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
e340: 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
e350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
e360: 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
e370: 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
e380: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
e390: 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72  h SQL table is r
e3a0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
e3b0: 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61  mory by an insta
e3c0: 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f  nce of the.** fo
e3d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e3e0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a  e..**.** Table.z
e3f0: 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  Name is the name
e400: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
e410: 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20  The case of the 
e420: 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41  original.** CREA
e430: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
e440: 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75  nt is stored, bu
e450: 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69  t case is not si
e460: 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a  gnificant for.**
e470: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a   comparisons..**
e480: 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69  .** Table.nCol i
e490: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
e4a0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
e4b0: 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43  table.  Table.aC
e4c0: 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  ol is a.** point
e4d0: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
e4e0: 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75  f Column structu
e4f0: 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63  res, one for eac
e500: 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20  h column..**.** 
e510: 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  If the table has
e520: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
e530: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61  ARY KEY, then Ta
e540: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65  ble.iPKey is the
e550: 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65   index of.** the
e560: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
e570: 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65  that key.   Othe
e580: 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65  rwise Table.iPKe
e590: 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20  y is negative.  
e5a0: 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  Note.** that the
e5b0: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
e5c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73   PRIMARY KEY mus
e5d0: 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72  t be INTEGER for
e5e0: 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a   this field to.*
e5f0: 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e  * be set.  An IN
e600: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
e610: 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  Y is used as the
e620: 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20   rowid for each 
e630: 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61  row of.** the ta
e640: 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65  ble.  If a table
e650: 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20   has no INTEGER 
e660: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
e670: 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  n a random rowid
e680: 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64  .** is generated
e690: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
e6a0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f   the table.  TF_
e6b0: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73  HasPrimaryKey is
e6c0: 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74   set if.** the t
e6d0: 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49  able has any PRI
e6e0: 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45  MARY KEY, INTEGE
e6f0: 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a  R or otherwise..
e700: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d  **.** Table.tnum
e710: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
e720: 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74  ber for the root
e730: 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74   BTree page of t
e740: 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a  he table in the.
e750: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
e760: 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20  .  If Table.iDb 
e770: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
e780: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
e790: 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e  le backend.** in
e7a0: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20   sqlite.aDb[].  
e7b0: 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69  0 is for the mai
e7c0: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31  n database and 1
e7d0: 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65   is for the file
e7e0: 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74   that.** holds t
e7f0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
e800: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66  and indices.  If
e810: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73   TF_Ephemeral is
e820: 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65   set.** then the
e830: 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64   table is stored
e840: 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20   in a file that 
e850: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
e860: 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e   deleted.** when
e870: 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   the VDBE cursor
e880: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73   to the table is
e890: 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69   closed.  In thi
e8a0: 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75  s case Table.tnu
e8b0: 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42  m .** refers VDB
e8c0: 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
e8d0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74  that holds the t
e8e0: 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74  able open, not t
e8f0: 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  o the root.** pa
e900: 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e  ge number.  Tran
e910: 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65  sient tables are
e920: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68   used to hold th
e930: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a  e results of a.*
e940: 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74  * sub-query that
e950: 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64   appears instead
e960: 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
e970: 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f   name in the FRO
e980: 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20  M clause .** of 
e990: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
e9a0: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  nt..*/.struct Ta
e9b0: 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
e9c0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
e9d0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
e9e0: 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
e9f0: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
ea00: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
ea10: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
ea20: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
ea30: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
ea40: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
ea50: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
ea60: 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
ea70: 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
ea80: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
ea90: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
eaa0: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
eab0: 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
eac0: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
ead0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
eae0: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
eaf0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
eb00: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
eb10: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
eb20: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
eb30: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
eb40: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
eb50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
eb60: 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20  HECK.  ExprList 
eb70: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
eb80: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
eb90: 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ints */.#endif. 
eba0: 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45   LogEst nRowLogE
ebb0: 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  st;   /* Estimat
ebc0: 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65  ed rows in table
ebd0: 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73   - from sqlite_s
ebe0: 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20  tat1 table */.  
ebf0: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
ec00: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
ec10: 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73  ee node for this
ec20: 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65   table (see note
ec30: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36   above) */.  i16
ec40: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
ec50: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
ec60: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
ec70: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69  PKey] as the pri
ec80: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31  mary key */.  i1
ec90: 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
eca0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ecb0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
ecc0: 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
ecd0: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
ece0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
ecf0: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
ed00: 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
ed10: 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
ed20: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
ed30: 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
ed40: 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  w in bytes */.  
ed50: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
ed60: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
ed70: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
ed80: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
ed90: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
eda0: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
edb0: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
edc0: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
edd0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ede0: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
edf0: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
ee00: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
ee10: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
ee20: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
ee30: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
ee40: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
ee50: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
ee60: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
ee70: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
ee80: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
ee90: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
eea0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
eeb0: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
eec0: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
eed0: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
eee0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
eef0: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
ef00: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
ef10: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
ef20: 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
ef30: 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
ef40: 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
ef50: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
ef60: 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
ef70: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
ef80: 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
ef90: 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
efa0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
efb0: 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
efc0: 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
efd0: 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
efe0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
eff0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
f000: 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
f010: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
f020: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
f030: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
f040: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
f050: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
f060: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
f070: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
f080: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
f090: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
f0a0: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
f0b0: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
f0c0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
f0d0: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
f0e0: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
f0f0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
f100: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
f110: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
f120: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
f130: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
f140: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
f150: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
f160: 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
f170: 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
f180: 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50  No rowid used. P
f190: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
f1a0: 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  e key */.../*.**
f1b0: 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
f1c0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
f1d0: 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
f1e0: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
f1f0: 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
f200: 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
f210: 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
f220: 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
f230: 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
f240: 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
f250: 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
f260: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f270: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
f280: 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
f290: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
f2a0: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
f2b0: 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
f2c0: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
f2d0: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
f2e0: 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
f2f0: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
f300: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
f310: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
f320: 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
f330: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
f340: 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
f350: 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
f360: 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
f370: 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
f380: 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
f390: 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
f3a0: 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  utRowid)==0)../*
f3b0: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
f3c0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
f3d0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
f3e0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f3f0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
f400: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
f410: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
f420: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
f430: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
f440: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
f450: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
f460: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
f470: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
f480: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
f490: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
f4a0: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
f4b0: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
f4c0: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
f4d0: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
f4e0: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
f4f0: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
f500: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
f510: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
f520: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
f530: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
f540: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
f550: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
f560: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
f570: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
f580: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
f590: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
f5a0: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
f5b0: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
f5c0: 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
f5d0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
f5e0: 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
f5f0: 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
f600: 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
f610: 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
f620: 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
f630: 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
f640: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
f650: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
f660: 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
f670: 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
f680: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
f690: 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
f6a0: 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
f6b0: 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
f6c0: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
f6d0: 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
f6e0: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
f6f0: 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
f700: 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
f710: 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
f720: 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
f730: 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
f740: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
f750: 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
f760: 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
f770: 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
f780: 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
f790: 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
f7a0: 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
f7b0: 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
f7c0: 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
f7d0: 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
f7e0: 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
f7f0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
f800: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
f810: 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
f820: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
f830: 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
f840: 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
f850: 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
f860: 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
f870: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
f880: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
f890: 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
f8a0: 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
f8b0: 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
f8c0: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
f8d0: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
f8e0: 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
f8f0: 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
f900: 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
f910: 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
f920: 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
f930: 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
f940: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
f950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
f960: 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
f970: 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
f980: 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
f990: 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
f9a0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
f9b0: 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
f9c0: 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
f9d0: 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
f9e0: 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
f9f0: 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
fa00: 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
fa10: 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
fa20: 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
fa30: 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
fa40: 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
fa50: 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
fa60: 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
fa70: 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
fa80: 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
fa90: 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
faa0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
fab0: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
fac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fad0: 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
fae0: 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
faf0: 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
fb00: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
fb10: 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
fb20: 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
fb30: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
fb40: 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
fb50: 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
fb60: 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
fb70: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
fb80: 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
fb90: 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
fba0: 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
fbb0: 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
fbc0: 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
fbd0: 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
fbe0: 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
fbf0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
fc00: 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
fc10: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
fc20: 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
fc30: 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
fc40: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
fc50: 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
fc60: 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
fc70: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
fc80: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
fc90: 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
fca0: 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
fcb0: 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
fcc0: 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
fcd0: 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
fce0: 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
fcf0: 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
fd00: 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
fd10: 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
fd20: 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
fd30: 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
fd40: 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
fd50: 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
fd60: 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
fd70: 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
fd80: 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
fd90: 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
fda0: 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
fdb0: 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
fdc0: 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
fdd0: 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
fde0: 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
fdf0: 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
fe00: 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
fe10: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
fe20: 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
fe30: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
fe40: 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
fe50: 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
fe60: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
fe70: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
fe80: 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
fe90: 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
fea0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
feb0: 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
fec0: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
fed0: 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
fee0: 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
fef0: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
ff00: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
ff10: 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
ff20: 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
ff30: 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
ff40: 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
ff50: 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
ff60: 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
ff70: 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
ff80: 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
ff90: 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
ffa0: 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
ffb0: 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
ffc0: 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
ffd0: 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
ffe0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
fff0: 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
10000 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
10010 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
10020 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
10030 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
10040 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
10050 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
10060 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
10070 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
10080 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
10090 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
100a0 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
100b0 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
100c0 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
100d0 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
100e0 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
100f0 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
10100 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
10110 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
10120 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
10130 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
10140 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
10150 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
10160 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
10170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
10180 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
10190 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
101a0 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
101b0 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
101c0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
101d0 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
101e0 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
101f0 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
10200 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
10210 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
10220 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
10230 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
10240 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
10250 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
10260 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
10270 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
10280 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
10290 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
102a0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
102b0 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
102c0 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
102d0 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
102e0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
102f0 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
10300 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
10310 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
10320 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
10330 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
10340 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
10350 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
10360 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
10370 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
10380 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
10390 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
103a0 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
103b0 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
103c0 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
103d0 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
103e0 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
103f0 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
10400 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10410 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10420 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
10430 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
10440 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
10450 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
10460 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
10470 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
10480 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
10490 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
104a0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
104b0 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
104c0 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
104d0 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
104e0 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
104f0 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
10500 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
10510 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
10520 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
10530 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
10540 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
10550 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
10560 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
10570 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10580 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
10590 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
105a0 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
105b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
105c0 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
105d0 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
105e0 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
105f0 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
10600 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10610 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
10620 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
10630 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
10640 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10650 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
10660 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
10670 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
10680 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
10690 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
106a0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
106b0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
106c0 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
106d0 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
106e0 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
106f0 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
10700 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
10710 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
10720 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
10730 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
10740 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10750 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
10760 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10770 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
10780 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
10790 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
107a0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
107b0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
107c0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
107d0 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
107e0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
107f0 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
10800 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
10810 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
10820 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
10830 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
10840 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
10850 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
10860 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
10870 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
10880 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
10890 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
108a0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
108b0 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
108c0 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
108d0 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
108e0 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
108f0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
10900 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
10910 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
10920 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
10930 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
10940 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
10950 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
10960 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
10970 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
10980 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
10990 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
109a0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
109b0 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
109c0 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
109d0 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
109e0 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
109f0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
10a00 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
10a10 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
10a20 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
10a30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
10a40 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
10a50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10a60 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
10a70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
10a80 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
10a90 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
10aa0 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
10ab0 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 69 73  equal */.  u8 is
10ac0 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 2f  Corrupt;       /
10ad0 2a 20 43 6f 72 72 75 70 74 69 6f 6e 20 64 65 74  * Corruption det
10ae0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
10af0 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 4d  Compare() */.  M
10b00 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
10b10 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
10b20 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20    int r1;       
10b30 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
10b40 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
10b50 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74   > rhs) */.  int
10b60 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   r2;            
10b70 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
10b80 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68  urn if (rhs < lh
10b90 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  s) */.};.../*.**
10ba0 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
10bb0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
10bc0 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
10bd0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10be0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10bf0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
10c00 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
10c10 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
10c20 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
10c30 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
10c40 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
10c50 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
10c60 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
10c70 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
10c80 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
10c90 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
10ca0 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
10cb0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
10cc0 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
10cd0 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
10ce0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
10cf0 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
10d00 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
10d10 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
10d20 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
10d30 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
10d40 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
10d50 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
10d60 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
10d70 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
10d80 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
10d90 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
10da0 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
10db0 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
10dc0 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
10dd0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
10de0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
10df0 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
10e00 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a  2 because the .*
10e10 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
10e20 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
10e30 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
10e40 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
10e50 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
10e60 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
10e70 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
10e80 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
10e90 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
10ea0 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
10eb0 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
10ec0 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
10ed0 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
10ee0 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
10ef0 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
10f00 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
10f10 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
10f20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
10f30 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
10f40 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
10f50 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
10f60 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
10f70 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
10f80 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
10f90 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
10fa0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
10fb0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
10fc0 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
10fd0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
10fe0 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74  tion .** algorit
10ff0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
11000 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
11010 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
11020 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
11030 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73  ** element..*/.s
11040 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20  truct Index {.  
11050 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11060 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
11070 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
11080 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d  /.  i16 *aiColum
11090 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
110a0 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72  Which columns ar
110b0 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69  e used by this i
110c0 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20  ndex.  1st is 0 
110d0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52  */.  LogEst *aiR
110e0 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a  owLogEst;     /*
110f0 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45   From ANALYZE: E
11100 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65  st. rows selecte
11110 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e  d by each column
11120 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
11130 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
11140 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
11150 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
11160 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
11170 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ;           /* S
11180 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
11190 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
111a0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
111b0 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20  Index *pNext;   
111c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
111d0 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
111e0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
111f0 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
11200 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
11210 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
11220 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  a containing thi
11230 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  s index */.  u8 
11240 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
11250 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63        /* for eac
11260 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d  h column: True==
11270 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
11280 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
11290 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
112a0 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61  * Array of colla
112b0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61  tion sequence na
112c0 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f  mes for index */
112d0 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64  .  Expr *pPartId
112e0 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57  xWhere;     /* W
112f0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
11300 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20  partial indices 
11310 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  */.  KeyInfo *pK
11320 65 79 49 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a  eyInfo;       /*
11330 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63   A KeyInfo objec
11340 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 74  t suitable for t
11350 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
11360 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
11370 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
11380 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
11390 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
113a0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
113b0 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
113c0 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
113d0 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
113e0 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
113f0 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
11400 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11410 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
11420 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
11430 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
11440 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11450 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
11460 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
11470 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11490 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
114a0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
114b0 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
114c0 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
114d0 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
114e0 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
114f0 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
11500 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
11510 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
11520 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
11530 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
11540 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
11550 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
11560 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
11570 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
11580 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
11590 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
115a0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
115b0 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
115c0 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
115d0 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
115e0 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
115f0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
11600 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
11610 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
11620 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
11630 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
11640 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
11650 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
11660 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
11670 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
11680 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
11690 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
116a0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
116b0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
116c0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
116d0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
116e0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
116f0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
11700 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
11710 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
11720 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
11730 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
11740 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
11750 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
11760 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  key */.#endif.};
11770 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
11780 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
11790 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
117a0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
117b0 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
117c0 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
117d0 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
117e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
117f0 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
11800 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
11810 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
11820 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
11830 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
11840 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
11850 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
11860 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
11870 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
11880 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
11890 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
118a0 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
118b0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
118c0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
118d0 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
118e0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
118f0 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 0a 2a  RIMARYKEY)../*.*
11900 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
11910 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
11920 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
11930 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
11940 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
11950 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
11960 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
11970 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
11980 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
11990 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
119a0 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
119b0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
119c0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
119d0 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
119e0 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
119f0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
11a00 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
11a10 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
11a20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
11a30 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
11a40 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
11a50 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
11a60 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
11a70 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
11a80 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
11a90 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
11aa0 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
11ab0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
11ac0 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
11ad0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
11ae0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
11af0 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
11b00 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
11b10 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
11b20 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
11b30 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
11b40 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
11b50 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
11b60 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
11b70 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
11b80 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
11b90 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
11ba0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
11bb0 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
11bc0 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
11bd0 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
11be0 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
11bf0 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
11c00 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
11c10 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
11c20 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
11c30 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
11c40 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
11c50 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
11c60 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
11c70 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
11c80 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
11c90 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
11ca0 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
11cb0 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
11cc0 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
11cd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
11ce0 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
11cf0 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
11d00 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11d10 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
11d20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
11d30 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
11d40 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
11d50 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
11d60 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
11d70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
11d80 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
11d90 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
11da0 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
11db0 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
11dc0 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
11dd0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
11de0 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
11df0 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
11e00 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
11e10 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
11e20 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
11e30 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
11e40 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
11e50 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
11e60 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
11e70 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
11e80 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
11e90 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
11ea0 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
11eb0 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
11ec0 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
11ed0 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
11ee0 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
11ef0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
11f00 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
11f10 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
11f20 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
11f30 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
11f40 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
11f50 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
11f60 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
11f70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
11f80 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
11f90 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
11fa0 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
11fd0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
11fe0 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
11ff0 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
12000 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
12010 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
12020 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
12030 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
12040 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
12070 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
12080 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
12090 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
120a0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
120b0 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
120c0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
120d0 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
120e0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
120f0 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
12100 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
12110 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
12120 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12130 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
12140 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
12150 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
12160 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
12170 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
12180 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
12190 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
121a0 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
121b0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
121c0 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
121d0 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
121e0 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
121f0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
12200 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
12210 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
12220 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
12230 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
12240 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
12250 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
12260 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
12270 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
12280 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
12290 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
122a0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
122b0 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
122c0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
122d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
122e0 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
122f0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
12300 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
12310 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
12320 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
12330 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
12340 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
12350 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
12360 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
12370 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
12380 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
12390 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
123a0 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
123b0 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
123c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
123d0 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
123e0 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
123f0 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
12400 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12410 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
12420 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
12430 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
12460 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
12470 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
12480 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
124b0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
124c0 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
124d0 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
124e0 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
124f0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
12500 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
12510 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
12520 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
12530 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
12540 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
12550 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
12560 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
12570 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
12580 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
12590 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
125a0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
125b0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
125c0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
125d0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
125e0 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
125f0 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
12600 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
12610 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
12620 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
12630 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
12640 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12650 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
12660 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
12670 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
12680 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
12690 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
126a0 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
126b0 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
126c0 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
126d0 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
126e0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
126f0 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
12700 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
12710 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
12720 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
12730 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
12740 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
12750 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
12760 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
12770 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
12780 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
12790 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
127a0 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
127b0 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
127c0 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
127d0 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
127e0 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
127f0 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
12800 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
12810 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
12820 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
12830 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
12840 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
12850 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
12860 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
12870 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
12880 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
12890 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
128a0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
128b0 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
128c0 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
128d0 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
128e0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
128f0 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
12900 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
12910 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
12920 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
12930 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
12940 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
12950 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
12960 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
12970 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
12980 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
12990 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
129a0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
129b0 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
129c0 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
129d0 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
129e0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
129f0 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
12a00 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
12a10 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
12a20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
12a30 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
12a40 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
12a50 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
12a60 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
12a70 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
12a80 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
12a90 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
12aa0 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
12ab0 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54  K_BLOB, .** or T
12ac0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
12ad0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
12ae0 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
12af0 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
12b00 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
12b10 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
12b20 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
12b30 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
12b40 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
12b50 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
12b60 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
12b70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
12b80 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
12b90 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
12ba0 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
12bb0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
12bc0 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
12bd0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
12be0 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
12bf0 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
12c00 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
12c10 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
12c20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
12c30 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
12c40 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
12c50 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
12c60 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
12c70 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
12c80 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
12c90 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
12ca0 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
12cb0 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
12cc0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
12cd0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
12ce0 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
12cf0 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
12d00 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
12d10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12d20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
12d30 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
12d40 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
12d50 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
12d60 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
12d70 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
12d80 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
12d90 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
12da0 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
12db0 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
12dc0 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
12dd0 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c  pList is .** val
12de0 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
12df0 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
12e00 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
12e10 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
12e20 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
12e30 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
12e40 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
12e50 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
12e60 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
12e70 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
12e80 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
12e90 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
12ea0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
12eb0 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
12ec0 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
12ed0 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
12ee0 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
12ef0 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
12f00 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
12f10 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
12f20 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
12f30 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
12f40 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
12f50 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
12f60 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
12f70 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
12f80 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
12f90 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
12fa0 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
12fb0 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
12fc0 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
12fd0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
12fe0 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
12ff0 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
13000 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
13010 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  k .** character 
13020 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
13030 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
13040 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
13050 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  lds the index .*
13060 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
13070 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
13080 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
13090 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
130a0 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
130b0 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
130c0 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
130d0 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
130e0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
130f0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
13100 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
13110 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
13120 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
13130 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
13140 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
13150 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
13160 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
13170 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
13180 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
13190 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
131a0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
131b0 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
131c0 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
131d0 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
131e0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
131f0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
13200 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
13210 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
13220 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
13230 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
13240 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
13250 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
13260 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
13270 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
13280 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
13290 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
132a0 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
132b0 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
132c0 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
132d0 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
132e0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
132f0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
13300 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
13310 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
13320 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
13330 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
13340 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
13350 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
13360 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
13370 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
13380 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
13390 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
133a0 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
133b0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
133c0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
133d0 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
133e0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
133f0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
13400 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
13410 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
13420 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
13430 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
13440 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
13450 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
13460 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
13470 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
13480 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
13490 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
134a0 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
134b0 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
134c0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
134d0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
134e0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
134f0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
13500 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
13510 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
13520 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
13530 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
13540 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
13550 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
13560 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
13570 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
13580 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
13590 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
135a0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
135b0 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
135c0 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
135d0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
135e0 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
135f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
13600 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
13610 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
13620 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
13630 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
13640 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
13650 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
13660 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
13670 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
13680 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
13690 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
136a0 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
136b0 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
136c0 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
136d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
136e0 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
136f0 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
13700 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
13710 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
13720 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
13730 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
13740 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
13750 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
13760 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
13770 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
13780 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
13790 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
137a0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
137b0 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
137c0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
137d0 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a  unction. .  ****
137e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13820 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
13830 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13840 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
13850 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
13860 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
13870 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
13880 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
13890 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
138a0 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
138b0 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
138c0 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
138d0 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
138e0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
138f0 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
13900 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
13910 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
13920 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
13930 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
13940 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
13950 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
13960 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
13970 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
13980 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
13990 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
139a0 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
139b0 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
139c0 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
139d0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
139e0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
139f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a30 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
13a40 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
13a50 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
13a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
13a70 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
13a80 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
13a90 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
13aa0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
13ab0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
13ac0 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
13ad0 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
13ae0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
13b10 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
13b20 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13b40 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
13b50 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
13b80 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30 20 74  nlikely:  1000 t
13b90 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
13ba0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
13bb0 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
13bc0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
13bd0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
13be0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
13c10 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
13c20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
13c30 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
13c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
13c50 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
13c60 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
13c70 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
13c80 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
13c90 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
13ca0 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
13cb0 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
13cc0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
13cd0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
13ce0 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
13cf0 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
13d00 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
13d30 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
13d40 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
13d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d60 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
13d70 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
13d80 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
13d90 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
13da0 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
13db0 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
13dc0 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
13dd0 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
13de0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
13df0 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
13e00 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
13e10 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
13e20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13e30 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
13e40 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
13e50 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
13e60 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
13e70 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
13e80 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64  01 /* Originated
13e90 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   in ON or USING 
13ea0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
13eb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
13ec0 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
13ed0 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
13ee0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
13ef0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
13f00 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
13f10 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
13f20 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
13f30 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
13f40 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
13f50 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
13f60 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
13f70 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
13f80 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
13f90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
13fa0 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
13fb0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
13fc0 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
13fd0 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
13fe0 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
13ff0 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
14000 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
14010 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
14020 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
14030 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
14040 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
14050 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
14060 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
14070 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
14080 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
14090 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
140a0 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
140b0 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
140c0 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
140d0 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
140e0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
140f0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
14100 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
14110 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
14120 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
14130 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
14140 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
14150 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
14160 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
14170 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
14180 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
14190 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
141a0 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
141b0 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
141c0 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
141d0 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
141e0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
141f0 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
14200 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
14210 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
14220 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
14230 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
14240 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
14250 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
14260 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
14270 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
14280 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
14290 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
142a0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
142b0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
142c0 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
142d0 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
142e0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
142f0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
14300 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
14310 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
14320 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
14330 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
14340 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
14350 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
14360 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
14370 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
14380 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
14390 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
143a0 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
143b0 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
143c0 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
143d0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
143e0 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e  efine EP_Constan
143f0 74 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e  t  0x080000 /* N
14400 6f 64 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e  ode is a constan
14410 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  t */../*.** Thes
14420 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
14430 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
14440 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
14450 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72   in the .** Expr
14460 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
14470 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
14480 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
14490 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
144a0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
144b0 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
144c0 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
144d0 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
144e0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
144f0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
14500 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
14510 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
14520 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
14530 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
14540 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
14550 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
14560 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
14570 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
14580 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
14590 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
145a0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
145b0 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
145c0 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
145d0 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
145e0 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
145f0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
14600 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
14610 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
14620 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
14630 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
14640 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
14650 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
14660 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
14670 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
14680 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
14690 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
146a0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
146b0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
146c0 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
146d0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
146e0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
146f0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
14700 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
14710 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
14720 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
14730 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
14740 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
14750 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
14760 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
14770 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
14780 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
14790 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
147a0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
147b0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
147c0 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
147d0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
147e0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
147f0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
14800 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
14810 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
14820 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
14830 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
14840 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
14850 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
14860 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
14870 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
14880 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
14890 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
148a0 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
148b0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
148c0 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
148d0 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
148e0 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
148f0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
14900 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
14910 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
14920 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
14930 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
14940 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
14950 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
14960 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
14970 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
14980 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
14990 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
149a0 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
149b0 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
149c0 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
149d0 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
149e0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
149f0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
14a00 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
14a10 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
14a20 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
14a30 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
14a40 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
14a50 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
14a60 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
14a70 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
14a80 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
14a90 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
14aa0 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
14ab0 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
14ac0 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
14ad0 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
14ae0 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
14af0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
14b00 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
14b10 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
14b20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
14b30 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
14b40 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
14b50 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
14b60 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
14b70 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
14b80 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
14b90 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
14ba0 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
14bb0 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
14bc0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
14bd0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
14be0 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
14bf0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
14c00 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
14c10 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
14c20 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
14c30 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
14c40 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
14c50 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
14c60 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
14c70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
14c80 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
14c90 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
14ca0 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
14cb0 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
14cc0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
14cd0 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
14ce0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
14cf0 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
14d00 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
14d10 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
14d20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
14d30 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
14d40 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
14d50 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
14d60 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
14d70 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
14d80 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
14d90 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
14da0 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
14db0 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
14dc0 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
14dd0 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
14de0 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
14df0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
14e00 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
14e10 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
14e20 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
14e30 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
14e40 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
14e50 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
14e60 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
14e70 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
14e80 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
14e90 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
14ea0 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
14eb0 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
14ec0 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
14ed0 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
14ee0 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
14ef0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
14f00 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
14f10 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
14f20 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
14f30 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
14f40 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
14f50 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
14f60 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
14f70 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
14f80 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
14f90 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
14fa0 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
14fb0 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fd0 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
14fe0 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
14ff0 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
15000 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
15010 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15020 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
15030 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
15040 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
15050 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
15060 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
15070 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
15080 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
15090 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
150a0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
150b0 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
150c0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
150d0 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
150e0 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
150f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
15100 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
15110 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
15120 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
15130 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
15140 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
15150 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
15160 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
15170 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
15180 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
15190 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
151a0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
151b0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
151c0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
151d0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
151e0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
151f0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
15200 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
15210 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
15220 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
15230 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
15240 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
15250 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
15260 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
15270 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
15280 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
15290 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
152a0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
152b0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
152c0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
152d0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
152e0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
152f0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
15300 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
15310 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
15320 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
15330 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
15340 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
15350 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
15360 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
15370 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
15380 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
15390 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
153a0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
153b0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
153c0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
153d0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
153e0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
153f0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
15400 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
15410 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
15420 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
15430 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
15440 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
15450 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15460 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
15470 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
15480 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
15490 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
154a0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
154b0 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
154c0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
154d0 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
154e0 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
154f0 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
15500 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
15510 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
15520 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
15530 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
15540 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
15550 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
15560 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
15570 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
15580 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
15590 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
155a0 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
155b0 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
155c0 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
155d0 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
155e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
155f0 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
15600 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
15610 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
15620 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
15630 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
15640 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
15650 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
15660 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
15670 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
15680 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
15690 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
156a0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
156b0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
156c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
156d0 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
156e0 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
156f0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
15700 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
15710 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
15720 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
15730 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
15740 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
15750 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
15760 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
15770 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
15780 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
15790 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
157a0 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
157b0 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
157c0 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
157d0 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
157e0 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
157f0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
15800 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
15810 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
15820 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
15830 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
15840 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
15850 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
15860 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
15870 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
15880 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
15890 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
158a0 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
158b0 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
158c0 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
158d0 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
158e0 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
158f0 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
15900 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
15910 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
15920 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
15930 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
15940 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
15950 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
15960 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
15970 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
15980 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
15990 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
159a0 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
159b0 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
159c0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
159d0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
159e0 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
159f0 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
15a00 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
15a10 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
15a20 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
15a30 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
15a40 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
15a50 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
15a60 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
15a70 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
15a80 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
15a90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
15aa0 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
15ab0 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
15ac0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
15ad0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
15ae0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
15af0 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
15b00 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
15b10 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
15b20 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
15b30 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
15b40 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
15b50 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
15b60 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
15b70 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
15b80 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
15b90 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
15ba0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
15bb0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
15bc0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
15bd0 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
15be0 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
15bf0 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
15c00 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
15c10 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
15c20 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15c30 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
15c40 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
15c50 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
15c60 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
15c70 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
15c80 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
15c90 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
15ca0 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
15cb0 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
15cc0 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
15cd0 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
15ce0 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
15cf0 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
15d00 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
15d10 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
15d20 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
15d30 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
15d40 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
15d50 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
15d60 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
15d70 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
15d80 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20  utine */.    u8 
15d90 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
15da0 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
15db0 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65  etween this able
15dc0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
15dd0 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  s */.    unsigne
15de0 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
15df0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
15e00 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
15e10 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
15e20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
15e30 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
15e40 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
15e50 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
15e60 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
15e70 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
15e80 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
15e90 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
15ea0 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ne */.    unsign
15eb0 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
15ec0 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
15ed0 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
15ee0 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
15ef0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
15f00 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
15f10 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
15f20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
15f30 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
15f40 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
15f50 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
15f60 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
15f70 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
15f80 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
15f90 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
15fa0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
15fb0 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
15fc0 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
15fd0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
15fe0 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
15ff0 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
16000 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
16010 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
16020 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
16030 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
16040 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
16050 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
16060 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b     char *zIndex;
16070 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69       /* Identifi
16080 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
16090 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
160a0 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ause */.    Inde
160b0 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a  x *pIndex;    /*
160c0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
160d0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
160e0 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79  o zIndex, if any
160f0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
16100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
16110 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
16120 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
16130 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
16140 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
16150 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
16160 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
16170 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
16180 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
16190 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
161a0 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
161b0 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
161c0 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
161d0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
161e0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
161f0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
16200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
16210 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
16220 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
16230 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
16240 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
16250 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
16260 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
16270 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
16280 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
16290 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
162a0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
162b0 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
162c0 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
162d0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
162e0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
162f0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
16300 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
16310 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
16320 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
16330 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
16340 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
16350 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
16360 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
16370 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
16380 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
16390 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
163a0 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
163b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
163c0 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
163d0 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
163e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
163f0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
16400 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
16410 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
16420 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
16430 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16440 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
16450 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
16460 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
16470 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
16480 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
16490 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
164a0 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
164b0 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
164c0 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
164d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
164e0 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
164f0 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
16500 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
16510 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
16520 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
16530 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30  OPEN_CLOSE  0x00
16540 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
16550 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
16560 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
16570 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
16580 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  E      0x0020 /*
16590 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
165a0 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
165b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
165c0 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
165d0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c     0x0040 /* Onl
165e0 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
165f0 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
16600 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16610 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20  E_AND_ONLY      
16620 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e     0x0080 /* Don
16630 27 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66  't use indices f
16640 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23  or OR terms */.#
16650 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
16660 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
16670 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0100 /* pOrderBy
16680 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
16690 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
166a0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
166b0 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  Y       0x0200 /
166c0 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
166d0 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
166e0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
166f0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
16700 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20  TINCT    0x0400 
16710 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
16720 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
16730 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
16740 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
16750 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53       0x0800 /* S
16760 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
16770 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
16780 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
16790 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
167a0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
167b0 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
167c0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
167d0 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
167e0 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
167f0 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
16800 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
16810 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
16820 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
16830 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
16840 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
16850 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
16860 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
16870 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
16880 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
16890 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
168a0 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
168b0 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
168c0 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
168d0 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
168e0 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
168f0 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
16900 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
16910 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
16920 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
16930 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
16940 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
16950 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
16960 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
16970 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
16980 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
16990 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
169a0 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
169b0 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
169c0 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
169d0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
169e0 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
169f0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
16a00 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
16a10 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
16a20 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
16a30 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
16a40 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
16a50 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
16a60 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
16a70 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
16a80 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
16a90 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
16aa0 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
16ab0 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
16ac0 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63  inner-most .** c
16ad0 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
16ae0 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
16af0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
16b00 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
16b10 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
16b20 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
16b30 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
16b40 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
16b50 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
16b60 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
16b70 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
16b80 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
16b90 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
16ba0 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
16bb0 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
16bc0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
16bd0 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
16be0 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
16bf0 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
16c00 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
16c10 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61  ented. .**.** Ea
16c20 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
16c30 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
16c40 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
16c50 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
16c60 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
16c70 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
16c80 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
16c90 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
16ca0 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
16cb0 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
16cc0 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
16cd0 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
16ce0 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
16cf0 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
16d00 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
16d10 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
16d20 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
16d30 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
16d40 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
16d50 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
16d60 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
16d70 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
16d80 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
16d90 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
16da0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
16db0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
16dc0 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
16dd0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
16de0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
16df0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
16e00 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
16e10 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
16e20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
16e30 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
16e40 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
16e50 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
16e60 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
16e70 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
16e80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16e90 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
16ea0 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
16eb0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
16ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16ed0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
16ee0 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
16ef0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
16f00 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b  */.  u8 ncFlags;
16f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
16f20 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
16f30 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
16f40 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
16f50 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
16f60 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
16f70 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
16f80 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  d..*/.#define NC
16f90 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20  _AllowAgg  0x01 
16fa0 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
16fb0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
16fc0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
16fd0 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
16fe0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e     0x02    /* On
16ff0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
17000 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
17010 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
17020 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34 20  _IsCheck   0x04 
17030 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
17040 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
17050 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
17060 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
17070 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38  C_InAggFunc 0x08
17080 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
17090 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
170a0 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
170b0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
170c0 50 61 72 74 49 64 78 20 20 20 30 78 31 30 20 20  PartIdx   0x10  
170d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
170e0 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
170f0 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
17100 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
17110 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
17120 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
17130 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
17140 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
17150 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
17160 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
17170 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
17180 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
17190 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
171a0 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
171b0 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
171c0 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
171d0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
171e0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
171f0 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
17200 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
17210 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
17220 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
17230 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
17240 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
17250 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
17260 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
17270 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
17280 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
17290 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
172a0 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
172b0 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
172c0 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
172d0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
172e0 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
172f0 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
17300 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
17310 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
17320 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
17330 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
17340 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
17350 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
17360 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
17370 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
17380 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
17390 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
173a0 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
173b0 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
173c0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
173d0 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
173e0 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
173f0 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
17400 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
17410 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
17420 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
17430 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
17440 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
17450 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
17460 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
17470 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
17480 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
17490 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
174a0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
174b0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
174c0 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
174d0 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
174e0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
174f0 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
17500 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
17510 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
17520 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17530 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
17540 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
17550 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
17560 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
17570 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
17580 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
17590 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
175a0 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
175b0 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
175c0 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73  XCEPT */.  u16 s
175d0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
175e0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
175f0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
17600 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
17610 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
17620 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
17630 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
17640 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e  counters */.  in
17650 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
17660 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
17670 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
17680 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
17690 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65  ect */.  u64 nSe
176a0 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20  lectRow;        
176b0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
176c0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
176d0 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ws */.  SrcList 
176e0 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
176f0 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
17700 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
17710 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
17720 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
17730 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
17740 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
17750 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
17760 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
17770 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
17780 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
17790 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
177a0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
177b0 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
177c0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
177d0 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
177e0 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
177f0 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
17800 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
17810 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
17820 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
17830 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
17840 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
17850 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
17860 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
17870 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
17880 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
17890 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
178a0 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
178b0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
178c0 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
178d0 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
178e0 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
178f0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
17900 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
17910 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
17920 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
17930 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
17940 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
17950 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
17960 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
17970 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
17980 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
17990 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
179a0 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
179b0 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
179c0 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
179d0 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
179e0 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
179f0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64     0x0002  /* Id
17a00 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
17a10 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
17a20 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
17a30 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
17a40 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
17a50 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17a60 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
17a70 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
17a80 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73   0x0008  /* Uses
17a90 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
17aa0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
17ab0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
17ac0 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
17ad0 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
17ae0 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
17af0 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
17b00 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
17b10 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a  o     0x0020  /*
17b20 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
17b30 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
17b40 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20  data */.        
17b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
17b60 20 20 20 30 78 30 30 34 30 20 20 4e 4f 54 20 55     0x0040  NOT U
17b70 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SED */.#define S
17b80 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
17b90 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e    0x0080  /* Syn
17ba0 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
17bb0 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20  LUES clause */. 
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30     /*     0x0100
17be0 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64    NOT USED */.#d
17bf0 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
17c00 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30 20  rom      0x0200 
17c10 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
17c20 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
17c30 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
17c40 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
17c50 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a  rt    0x0400  /*
17c60 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
17c70 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
17c80 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
17c90 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
17ca0 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a        0x0800  /*
17cb0 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
17cc0 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
17cd0 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
17ce0 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
17cf0 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
17d00 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
17d10 6e 64 20 71 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a  nd query */.../*
17d20 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
17d30 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
17d40 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
17d50 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
17d60 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
17d70 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
17d80 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
17d90 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
17da0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
17db0 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
17dc0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
17dd0 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
17de0 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
17df0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
17e00 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20  ndex .**        
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
17e20 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
17e30 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
17e40 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
17e50 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
17e60 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
17e70 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
17e80 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
17e90 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
17ea0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
17eb0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
17ec0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
17ed0 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
17f00 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
17f10 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
17f20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
17f30 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
17f40 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
17f50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
17f60 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
17f70 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
17f80 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
17f90 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17fb0 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
17fc0 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
17fd0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
17fe0 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
17ff0 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
18000 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
18010 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
18020 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
18030 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18040 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
18050 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
18060 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
18070 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
18080 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
18090 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
180a0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
180b0 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
180c0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
180d0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
180e0 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
180f0 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
18100 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
18110 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
18120 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
18130 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
18140 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
18150 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
18180 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
18190 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
181a0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
181b0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
181c0 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
181d0 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
181e0 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
181f0 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
18200 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
18210 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
18220 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
18230 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
18250 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
18260 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
18270 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20  pDest->iSDParm. 
18280 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18290 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
182a0 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
182b0 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
182c0 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
182f0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
18300 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
18310 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
18320 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
18330 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
18340 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18350 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
18380 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
18390 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
183a0 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
183b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
183c0 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
183d0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
183e0 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
18410 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
18420 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
18430 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18440 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
18450 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
18460 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
18470 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
18480 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
18490 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
184a0 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
184b0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
184c0 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
184d0 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
184e0 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
18510 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
18520 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
18530 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
18560 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
18570 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
18580 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
185a0 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
185b0 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
185c0 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
185d0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
185e0 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
185f0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
18600 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
18610 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
18620 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
18630 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
18640 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
18670 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
18680 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
18690 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
186a0 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
186b0 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
186c0 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
186d0 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
186f0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18700 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
18710 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
18720 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
18730 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18740 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
18750 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18760 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
18770 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
18780 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
18790 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
187c0 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
187d0 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
187e0 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
18800 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
18810 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
18820 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
18830 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
18840 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
18850 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
18860 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
18870 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
18880 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
18890 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
188a0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
188b0 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
188c0 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
188d0 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
188e0 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
188f0 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
18900 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
18910 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
18920 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
18930 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
18960 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
18970 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
18980 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
18990 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
189a0 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
189b0 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
189c0 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
189d0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
189e0 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
189f0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
18a00 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
18a10 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
18a20 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
18a30 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
18a40 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
18a50 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
18a60 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
18a70 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
18a80 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
18a90 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
18aa0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
18ab0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
18ac0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
18ad0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
18ae0 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
18af0 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
18b00 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
18b10 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
18b20 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
18b30 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
18b40 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
18b50 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
18b60 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
18b70 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
18b80 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
18b90 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
18ba0 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
18bb0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
18bc0 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
18bd0 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
18be0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
18bf0 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
18c00 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
18c10 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
18c20 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
18c30 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
18c40 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
18c50 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
18c60 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
18c70 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
18c80 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
18c90 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
18ca0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
18cb0 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
18cc0 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
18cd0 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
18ce0 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
18cf0 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
18d00 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
18d10 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
18d20 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
18d30 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
18d40 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
18d50 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
18d60 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
18d70 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
18d80 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
18d90 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
18da0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
18db0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
18dc0 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
18dd0 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
18de0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
18df0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
18e00 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
18e10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
18e20 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
18e30 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
18e40 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
18e50 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
18e60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
18e70 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
18e80 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
18e90 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
18ea0 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
18eb0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
18ec0 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
18ed0 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
18ee0 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f  ffSdst;        /
18ef0 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
18f00 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
18f10 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
18f20 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
18f30 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
18f40 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
18f50 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
18f60 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
18f70 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
18f80 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
18f90 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
18fa0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
18fb0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
18fc0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
18fd0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
18fe0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
18ff0 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
19000 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
19010 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
19020 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
19030 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
19040 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
19050 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
19060 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
19070 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
19080 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
19090 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
190a0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
190b0 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
190c0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
190d0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
190e0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
190f0 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
19100 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
19110 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
19120 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
19130 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
19140 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
19150 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
19160 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
19170 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
19180 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
19190 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
191a0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
191b0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
191c0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
191d0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
191e0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
191f0 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
19200 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
19210 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
19220 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
19230 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
19240 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
19250 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
19260 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
19270 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
19280 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
19290 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
192a0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
192b0 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
192c0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
192d0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
192e0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
192f0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
19300 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
19310 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
19320 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
19330 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
19340 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
19350 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
19360 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
19370 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
19380 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
19390 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
193a0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
193b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
193c0 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
193d0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
193e0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
193f0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
19400 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
19410 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
19420 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
19430 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
19440 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
19450 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
19460 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
19470 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
19480 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
19490 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
194a0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
194b0 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
194c0 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
194d0 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
194e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
194f0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
19500 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
19510 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
19520 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
19530 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
19540 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
19550 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
19560 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
19570 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
19580 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
19590 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
195a0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
195b0 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
195c0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
195d0 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
195e0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
195f0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
19600 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
19610 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
19620 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
19630 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
19640 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
19650 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
19660 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
19670 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
19680 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
19690 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
196a0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
196b0 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
196c0 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
196d0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
196e0 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
196f0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
19700 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
19710 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
19720 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
19730 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
19740 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
19750 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
19760 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
19770 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
19780 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
19790 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
197a0 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
197b0 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
197c0 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
197d0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
197e0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
197f0 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
19800 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
19810 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
19820 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
19830 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
19840 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
19850 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
19860 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
19870 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
19880 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
19890 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
198a0 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
198b0 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
198c0 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
198d0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
198e0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
198f0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
19900 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f  typedef sqlite3_
19910 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a  uint64 yDbMask;.
19920 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
19930 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
19940 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Mask;.#endif../*
19950 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
19960 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
19970 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
19980 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
19990 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
199a0 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
199b0 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
199c0 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
199d0 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
199e0 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
199f0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
19a00 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
19a10 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
19a20 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
19a30 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
19a40 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
19a50 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
19a60 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
19a70 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
19a80 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
19a90 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
19aa0 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
19ab0 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
19ac0 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
19ad0 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
19ae0 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
19af0 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
19b00 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
19b10 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
19b20 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
19b30 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
19b40 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
19b50 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
19b60 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
19b70 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
19b80 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
19b90 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
19ba0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
19bb0 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
19bc0 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
19bd0 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
19be0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
19bf0 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
19c00 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
19c10 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
19c20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
19c30 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
19c40 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
19c50 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
19c60 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
19c70 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
19c80 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
19c90 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
19ca0 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
19cb0 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
19cc0 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
19cd0 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
19ce0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
19cf0 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
19d00 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
19d10 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
19d20 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
19d30 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
19d40 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
19d50 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
19d60 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
19d70 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
19d80 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
19d90 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
19da0 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
19db0 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
19dc0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
19dd0 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
19de0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
19df0 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
19e00 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
19e10 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
19e20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
19e30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
19e40 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
19e50 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
19e60 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
19e70 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
19e80 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
19e90 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
19ea0 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
19eb0 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
19ec0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
19ed0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
19ee0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
19ef0 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
19f00 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
19f10 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
19f20 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
19f30 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
19f40 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
19f50 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
19f60 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
19f70 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
19f80 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  s */.  int aTemp
19f90 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48  Reg[8];     /* H
19fa0 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
19fb0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
19fc0 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  ers */.  int nRa
19fd0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
19fe0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
19ff0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1a000 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1a010 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1a020 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1a030 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1a040 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1a050 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1a060 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a070 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1a080 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1a090 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a0a0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1a0b0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1a0c0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1a0d0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1a0e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a0f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1a100 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1a110 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
1a120 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a130 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
1a140 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65  r */.  int nOnce
1a150 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1a160 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65  umber of OP_Once
1a170 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f   instructions so
1a180 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1a190 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
1a1a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
1a1b0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
1a1c0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1a1d0 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20  int iFixedOp;   
1a1e0 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61       /* Never ba
1a1f0 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69  ck out opcodes i
1a200 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72  FixedOp-1 or ear
1a210 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b  lier */.  int ck
1a220 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
1a230 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1a240 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
1a250 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
1a260 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49   */.  int iPartI
1a270 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61  dxTab;     /* Ta
1a280 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1a290 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69  g to a partial i
1a2a0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ndex */.  int iC
1a2b0 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1a2c0 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1a2d0 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1a2e0 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1a2f0 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1a300 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1a310 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1a320 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1a330 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1a340 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1a350 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1a360 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1a370 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1a380 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1a390 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1a3a0 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1a3b0 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1a3c0 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1a3d0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1a3e0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1a3f0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1a400 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1a410 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1a420 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1a430 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1a440 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1a450 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1a460 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1a470 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1a480 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1a490 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1a4a0 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1a4b0 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1a4c0 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1a4d0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1a4e0 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1a4f0 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1a500 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1a510 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1a520 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1a530 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1a540 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1a550 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1a560 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1a570 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1a580 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1a590 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1a5a0 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1a5b0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1a5c0 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1a5d0 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1a5e0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1a5f0 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1a600 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1a610 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1a620 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1a630 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1a640 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1a650 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1a660 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1a670 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1a680 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1a690 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
1a6a0 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
1a6b0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
1a6c0 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
1a6d0 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
1a6e0 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
1a6f0 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1a700 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a710 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1a720 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1a730 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1a740 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1a750 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1a760 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1a770 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1a780 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1a790 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1a7a0 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1a7b0 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1a7c0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 6e  -program */.#ifn
1a7d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a7e0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1a7f0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1a800 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a810 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1a820 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1a830 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1a840 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1a850 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1a860 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1a870 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1a880 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1a890 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1a8a0 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1a8b0 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1a8c0 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1a8d0 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1a8e0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1a8f0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1a900 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1a910 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1a920 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1a930 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1a940 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1a950 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1a960 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1a970 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1a980 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1a990 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1a9a0 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1a9b0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1a9c0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1a9d0 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b    int addrSkipPK
1a9e0 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
1a9f0 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e  s of instruction
1aa00 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59   to skip PRIMARY
1aa10 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20   KEY index */.  
1aa20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1aa30 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1aa40 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1aa50 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1aa60 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1aa70 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1aa80 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1aa90 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1aaa0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1aab0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1aac0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1aad0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1aae0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1aaf0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1ab00 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1ab10 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1ab20 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1ab30 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1ab40 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1ab50 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1ab60 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1ab70 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1ab80 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1ab90 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1aba0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1abb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1abc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1abd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1abe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1abf0 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1ac00 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1ac10 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1ac20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1ac30 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1ac40 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1ac50 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1ac60 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1ac70 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1ac80 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1ac90 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1aca0 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1acb0 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1acc0 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1acd0 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1ace0 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1acf0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1ad00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ad10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ad20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ad30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1ad40 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ad60 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1ad70 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1ad80 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1ad90 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1adb0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1adc0 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1add0 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1ade0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1adf0 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1ae00 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1ae10 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1ae20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20  u8 bFreeWith;   
1ae30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ae40 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c  e if pWith shoul
1ae50 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20  d be freed with 
1ae60 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65  parser */.  u8 e
1ae70 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1ae80 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1ae90 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1aea0 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1aeb0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1aec0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1aed0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1aee0 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1aef0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1af00 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1af10 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1af20 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1af30 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1af40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1af50 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1af60 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1af70 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1af80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1af90 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1afa0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1afb0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1afc0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1afd0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1afe0 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1aff0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1b000 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1b010 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1b020 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1b030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1b040 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1b050 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1b060 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1b070 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1b080 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1b090 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1b0a0 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1b0b0 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1b0c0 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1b0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1b0e0 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1b0f0 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1b100 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1b110 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1b120 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1b130 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1b140 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1b150 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1b160 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1b170 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1b180 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1b190 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1b1a0 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1b1b0 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1b1c0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1b1d0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1b1e0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1b1f0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1b200 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1b210 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1b220 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1b230 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1b240 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1b250 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1b260 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1b270 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1b280 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1b290 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1b2a0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1b2b0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1b2c0 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1b2d0 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1b2e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1b2f0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1b300 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1b310 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1b320 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1b330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b340 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1b350 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1b360 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1b370 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1b380 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1b390 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1b3a0 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1b3b0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1b3c0 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1b3d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1b3e0 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1b3f0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1b400 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1b410 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1b420 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1b430 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1b440 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1b450 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1b460 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1b470 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1b480 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a   or NULL */.};..
1b490 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1b4a0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1b4b0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1b4c0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1b4d0 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1b4e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1b4f0 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1b500 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1b510 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1b520 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1b530 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1b540 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1b550 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1b560 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1b570 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1b580 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1b590 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1b5a0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1b5b0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1b5c0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1b5d0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1b5e0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1b5f0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1b600 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1b610 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1b620 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1b630 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1b640 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1b650 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1b660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1b670 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1b680 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1b690 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1b6a0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1b6b0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1b6c0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1b6d0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1b6e0 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
1b6f0 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
1b700 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
1b710 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1b720 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1b730 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1b740 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1b750 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1b760 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1b770 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1b780 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1b790 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1b7a0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1b7b0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1b7c0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1b7d0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1b7e0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1b7f0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1b800 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1b810 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1b820 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1b830 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1b840 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
1b850 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
1b860 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
1b870 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
1b880 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1b890 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
1b8a0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
1b8b0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1b8c0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
1b8d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
1b8e0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
1b8f0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1b900 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
1b910 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
1b920 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
1b930 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
1b940 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
1b950 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
1b960 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
1b970 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1b980 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
1b990 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
1b9a0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
1b9b0 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
1b9c0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
1b9d0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1b9e0 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
1b9f0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
1ba00 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
1ba10 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
1ba20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1ba30 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
1ba40 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
1ba50 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
1ba60 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
1ba70 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
1ba80 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1ba90 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
1baa0 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
1bab0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
1bac0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
1bad0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
1bae0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
1baf0 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
1bb00 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
1bb10 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
1bb20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
1bb30 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
1bb40 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
1bb50 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1bb60 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
1bb70 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
1bb80 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
1bb90 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
1bba0 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
1bbb0 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
1bbc0 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
1bbd0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
1bbe0 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
1bbf0 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
1bc00 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
1bc10 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
1bc20 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
1bc30 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
1bc40 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
1bc50 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
1bc60 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1bc70 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
1bc80 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
1bc90 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
1bca0 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
1bcb0 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
1bcc0 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
1bcd0 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
1bce0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1bcf0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
1bd00 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
1bd10 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
1bd20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
1bd30 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
1bd40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
1bd50 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
1bd60 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
1bd70 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
1bd80 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1bd90 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1bda0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1bdb0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
1bdc0 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
1bdd0 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
1bde0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
1bdf0 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
1be00 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
1be10 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
1be20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1be30 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1be40 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
1be50 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
1be60 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
1be70 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
1be80 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
1be90 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
1bea0 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
1bed0 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
1bee0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
1bef0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1bf00 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
1bf10 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1bf20 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
1bf30 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
1bf40 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1bf50 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
1bf60 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
1bf70 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
1bf80 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
1bf90 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
1bfa0 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
1bfb0 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
1bfc0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1bfd0 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
1bfe0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1bff0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
1c000 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
1c010 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
1c020 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
1c030 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
1c040 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
1c050 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
1c060 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
1c070 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
1c080 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
1c090 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
1c0a0 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
1c0b0 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
1c0c0 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
1c0d0 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
1c0e0 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
1c0f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
1c100 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
1c110 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
1c120 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
1c130 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
1c140 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1c150 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
1c160 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
1c170 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
1c180 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
1c190 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1c1a0 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
1c1b0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1c1c0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
1c1d0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
1c1e0 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
1c1f0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
1c200 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
1c210 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
1c220 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1c230 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
1c240 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
1c250 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
1c260 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
1c270 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
1c280 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
1c290 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
1c2a0 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
1c2b0 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
1c2c0 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
1c2d0 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
1c2e0 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
1c2f0 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
1c300 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
1c310 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
1c320 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
1c330 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
1c340 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
1c350 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
1c360 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
1c370 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
1c380 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
1c390 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
1c3a0 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
1c3b0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1c3c0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1c3d0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1c3e0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1c3f0 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1c400 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1c410 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1c420 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1c430 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1c440 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1c450 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
1c460 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1c470 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1c480 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1c490 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
1c4a0 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
1c4b0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1c4c0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1c4d0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
1c4e0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1c500 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
1c510 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
1c520 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1c530 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
1c540 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1c550 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
1c560 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
1c570 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
1c580 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1c590 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1c5a0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1c5b0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1c5d0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1c5e0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1c5f0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1c600 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1c610 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1c620 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1c630 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1c640 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1c650 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1c660 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1c670 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1c680 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1c690 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1c6a0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1c6b0 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
1c6c0 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65  UPDATE). * targe
1c6d0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1c6e0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1c6f0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1c700 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72  able to update r
1c710 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72  ows of.. * pWher
1c720 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1c730 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1c740 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1c750 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1c760 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1c770 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1c780 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
1c790 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
1c7a0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
1c7b0 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
1c7c0 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
1c7d0 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
1c7e0 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
1c7f0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
1c800 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
1c810 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
1c830 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
1c840 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1c850 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
1c860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1c870 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1c880 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1c890 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
1c8a0 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
1c8b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
1c8c0 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
1c8d0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1c8e0 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
1c8f0 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
1c900 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
1c910 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
1c920 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
1c930 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20  SELECT statment 
1c940 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1c950 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20   INTO .. SELECT 
1c960 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74  ... */.  Token t
1c970 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
1c980 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1c990 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1c9a0 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1c9b0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1c9c0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1c9d0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1c9e0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1c9f0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1ca00 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1ca10 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1ca20 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
1ca30 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
1ca40 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
1ca50 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
1ca60 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
1ca70 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
1ca80 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
1ca90 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1caa0 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
1cab0 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
1cac0 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
1cad0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
1cae0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1caf0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1cb00 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
1cb10 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
1cb20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
1cb30 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
1cb40 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
1cb50 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
1cb60 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
1cb70 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
1cb80 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .  .*/.typedef s
1cb90 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
1cba0 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
1cbb0 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
1cbc0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
1cbd0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
1cbe0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
1cbf0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
1cc00 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1cc10 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
1cc20 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
1cc30 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
1cc40 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
1cc50 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
1cc60 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
1cc70 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
1cc80 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
1cc90 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
1cca0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
1ccb0 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
1ccc0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
1ccd0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
1cce0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
1ccf0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1cd00 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1cd10 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
1cd20 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
1cd30 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
1cd40 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1cd50 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1cd60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1cd70 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
1cd80 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
1cd90 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
1cda0 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
1cdb0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1cdc0 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
1cdd0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
1cde0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
1cdf0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
1ce00 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1ce10 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
1ce20 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
1ce30 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
1ce40 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
1ce50 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
1ce60 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
1ce70 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
1ce80 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
1ce90 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
1cea0 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
1ceb0 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
1cec0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43  far */.  int  nC
1ced0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
1cee0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
1cef0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
1cf00 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20    int  nAlloc;  
1cf10 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
1cf20 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
1cf30 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
1cf40 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20    int  mxAlloc; 
1cf50 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1cf60 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67  m allowed string
1cf70 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20   length */.  u8 
1cf80 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20    useMalloc;    
1cf90 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31    /* 0: none,  1
1cfa0 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  : sqlite3DbMallo
1cfb0 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d  c,  2: sqlite3_m
1cfc0 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20  alloc */.  u8   
1cfd0 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
1cfe0 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
1cff0 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
1d000 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  OBIG */.};.#defi
1d010 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  ne STRACCUM_NOME
1d020 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54  M   1.#define ST
1d030 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32  RACCUM_TOOBIG  2
1d040 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
1d050 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
1d060 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
1d070 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
1d080 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
1d090 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
1d0a0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
1d0b0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
1d0c0 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
1d0d0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
1d0e0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1d0f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
1d100 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
1d110 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
1d120 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
1d130 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1d140 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1d150 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1d160 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
1d170 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1d180 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
1d190 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
1d1a0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1d1b0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1d1c0 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
1d1d0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
1d1e0 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
1d1f0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
1d200 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
1d210 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
1d220 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
1d230 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
1d240 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
1d250 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
1d260 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1d270 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
1d280 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
1d290 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1d2a0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1d2b0 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
1d2c0 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
1d2d0 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d2f0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1d300 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
1d310 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
1d320 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1d330 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1d340 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
1d350 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
1d360 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
1d370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d380 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
1d390 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
1d3a0 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
1d3b0 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
1d3c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1d3d0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
1d3e0 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
1d3f0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
1d400 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
1d410 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1d420 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
1d430 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
1d440 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
1d450 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
1d460 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
1d470 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
1d480 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1d4b0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1d4c0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1d4d0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1d4e0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1d4f0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1d500 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1d510 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1d520 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1d530 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1d540 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1d550 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1d560 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1d570 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1d580 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1d590 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1d5a0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1d5b0 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1d5c0 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1d5d0 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1d5e0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1d5f0 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d610 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1d620 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1d630 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1d640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1d650 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1d660 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1d670 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1d680 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1d690 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1d6a0 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1d6b0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1d6c0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1d6d0 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1d6e0 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1d6f0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1d700 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1d710 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1d720 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1d730 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1d740 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1d750 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1d760 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1d770 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1d7a0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1d7b0 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1d7c0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1d7d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d7e0 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1d7f0 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1d800 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1d810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1d820 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1d830 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1d860 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1d870 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1d880 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d8a0 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1d8b0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1d8c0 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1d8d0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1d8e0 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1d8f0 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1d900 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1d910 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1d920 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1d930 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1d940 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1d950 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  led */.  /* The 
1d960 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
1d970 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
1d980 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
1d990 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
1d9a0 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
1d9b0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
1d9c0 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
1d9d0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d9f0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
1da00 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
1da10 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
1da20 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da40 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
1da50 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
1da60 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
1da70 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da90 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
1daa0 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
1dab0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1dac0 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1dae0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1daf0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1db00 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
1db10 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
1db20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1db30 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1db40 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1db50 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
1db60 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1db70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
1db80 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
1db90 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
1dba0 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1dbb0 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1dbc0 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1dbd0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1dbe0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
1dbf0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
1dc00 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
1dc10 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
1dc20 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
1dc30 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1dc50 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
1dc60 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
1dc70 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1dc80 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
1dc90 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
1dca0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1dcb0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
1dcc0 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
1dcd0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
1dce0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
1dcf0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
1dd00 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
1dd10 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
1dd20 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
1dd30 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
1dd40 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
1dd50 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
1dd60 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
1dd70 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
1dd80 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
1dd90 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
1dda0 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c  d*,int iSrcLine,
1ddb0 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
1ddc0 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
1ddd0 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
1dde0 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1de10 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
1de20 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1de30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
1de40 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28  TIN_TEST.  int (
1de50 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
1de60 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
1de70 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
1de80 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
1de90 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
1dea0 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1deb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1dec0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1ded0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1dee0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
1def0 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
1df00 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
1df10 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
1df20 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
1df30 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
1df40 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
1df50 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
1df60 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
1df70 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
1df80 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
1df90 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
1dfa0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
1dfb0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
1dfc0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
1dfd0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
1dfe0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
1dff0 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
1e000 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
1e010 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
1e020 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
1e030 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
1e040 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
1e050 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
1e060 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
1e070 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
1e080 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
1e090 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
1e0a0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1e0b0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
1e0c0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
1e0d0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
1e0e0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
1e0f0 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
1e100 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
1e110 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1e120 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
1e130 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
1e140 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
1e150 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
1e160 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
1e170 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
1e180 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
1e190 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
1e1a0 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
1e1b0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
1e1c0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
1e1d0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
1e1e0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
1e1f0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1e200 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
1e210 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
1e220 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1e230 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
1e240 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
1e250 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
1e260 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
1e270 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1e280 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1e2b0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1e2c0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
1e2d0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e2f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
1e300 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f  ueries */.  unio
1e310 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
1e340 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
1e350 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
1e360 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
1e390 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
1e3a0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
1e3d0 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53  r value */.    S
1e3e0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1e3f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
1e410 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
1e420 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
1e430 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
1e440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1e450 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
1e460 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1e470 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
1e480 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
1e490 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
1e4a0 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
1e4b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1e4c0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
1e4d0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
1e4e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1e4f0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
1e500 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1e510 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1e520 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
1e530 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1e540 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
1e550 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
1e560 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
1e570 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
1e580 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
1e590 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
1e5a0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
1e5b0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
1e5c0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
1e5d0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
1e5e0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
1e5f0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
1e600 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
1e610 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
1e620 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
1e630 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
1e640 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
1e650 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
1e660 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
1e670 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
1e680 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1e690 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1e6a0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
1e6b0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
1e6c0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
1e6d0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
1e6e0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
1e6f0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
1e700 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1e710 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
1e720 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
1e730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e740 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
1e750 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1e760 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
1e770 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
1e780 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
1e790 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
1e7a0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
1e7b0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e7d0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
1e7e0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1e7f0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
1e800 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1e810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e820 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
1e830 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
1e840 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
1e850 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1e860 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
1e870 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
1e880 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1e890 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
1e8a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
1e8b0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
1e8c0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
1e8d0 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20  st char *zErr;  
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e8f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
1e900 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
1e910 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
1e920 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  ];.};../*.** Ass
1e930 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1e940 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1e950 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1e960 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1e970 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1e980 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1e990 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1e9a0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1e9b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1e9c0 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1e9d0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1e9e0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1e9f0 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1ea00 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1ea30 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1ea40 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1ea60 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1eaa0 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1eab0 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1eac0 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1ead0 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1eae0 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1eaf0 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1eb00 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1eb10 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1eb20 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1eb30 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1eb40 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1eb50 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1eb60 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1eb70 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1eb80 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1eb90 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1eba0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1ebb0 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1ebc0 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1ebd0 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1ebe0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1ebf0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1ec00 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1ec10 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1ec20 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1ec30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1ec40 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1ec50 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1ec60 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1ec70 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1ec80 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1ec90 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1eca0 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1ecb0 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1ecc0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1ecd0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1ece0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1ecf0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1ed00 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1ed10 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1ed20 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1ed30 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1ed40 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1ed50 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1ed60 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c  o all.** the SQL
1ed70 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1ed80 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1ed90 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20  s an alisse for 
1eda0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1edb0 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1edc0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1edd0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1ede0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1edf0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1ee00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1ee10 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1ee20 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1ee30 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1ee40 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1ee50 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1ee60 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1ee70 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1ee80 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1ee90 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1eea0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1eeb0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1eec0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1eed0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1eee0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1eef0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1ef00 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1ef10 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1ef20 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1ef30 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1ef40 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1ef50 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1ef60 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1ef70 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1ef80 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1ef90 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1efa0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1efb0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1efc0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1efd0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1efe0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1eff0 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1f000 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1f010 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f020 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1f030 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1f040 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1f050 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1f060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1f070 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1f080 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f090 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f0a0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1f0b0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1f0c0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f0d0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f0e0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1f0f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f100 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1f110 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f120 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f130 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1f140 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1f150 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f160 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f170 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1f180 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1f190 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1f1a0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f1b0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f1c0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1f1d0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1f1e0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1f1f0 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1f200 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1f210 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1f220 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1f230 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1f240 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1f250 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1f260 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1f270 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f280 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1f290 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1f2a0 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1f2b0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1f2c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f2d0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
1f2e0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1f2f0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1f300 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1f310 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1f320 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1f330 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1f340 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1f350 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1f360 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1f370 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1f380 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1f390 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1f3a0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1f3b0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1f3c0 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1f3d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1f3e0 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1f3f0 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1f400 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1f410 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1f420 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1f430 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1f440 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1f450 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1f460 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1f470 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1f480 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1f490 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1f4a0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1f4b0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1f4c0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1f4d0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1f4e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1f4f0 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1f500 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1f510 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1f520 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1f530 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1f540 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1f550 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1f560 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1f570 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1f580 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1f590 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1f5a0 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1f5b0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1f5c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1f5d0 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1f5e0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1f5f0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1f600 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1f610 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1f620 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1f630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1f640 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1f650 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1f660 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1f670 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1f680 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1f690 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1f6a0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1f6b0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1f6c0 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1f6d0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1f6e0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1f6f0 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1f700 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
1f710 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
1f720 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
1f730 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
1f740 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
1f750 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
1f760 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
1f770 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
1f780 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
1f790 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
1f7a0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
1f7b0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
1f7c0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
1f7d0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
1f7e0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
1f7f0 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
1f800 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
1f810 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
1f820 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
1f830 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
1f840 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
1f850 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
1f860 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
1f870 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
1f880 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
1f890 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
1f8a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
1f8b0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
1f8c0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1f8d0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
1f8e0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
1f8f0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1f900 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
1f910 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
1f920 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
1f930 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1f940 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
1f950 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f960 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1f970 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
1f980 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
1f990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1f9a0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1f9b0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1f9c0 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
1f9d0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1f9e0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
1f9f0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
1fa00 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
1fa10 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1fa20 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
1fa30 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1fa40 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1fa50 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
1fa60 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1fa70 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1fa80 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
1fa90 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1faa0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1fab0 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
1fac0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
1fad0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
1fae0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1faf0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1fb00 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
1fb10 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1fb20 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1fb30 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
1fb40 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
1fb50 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
1fb60 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1fb70 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
1fb80 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
1fb90 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
1fba0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
1fbb0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
1fbc0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
1fbd0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1fbe0 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
1fbf0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1fc00 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
1fc10 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
1fc20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
1fc30 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
1fc40 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
1fc50 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
1fc60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1fc70 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
1fc80 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1fc90 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1fca0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1fcb0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
1fcc0 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
1fcd0 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
1fce0 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
1fcf0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
1fd00 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
1fd10 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
1fd20 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
1fd30 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fd50 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
1fd60 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
1fd70 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
1fd80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fd90 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
1fda0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
1fdb0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
1fdc0 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
1fdd0 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
1fde0 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51  /.};..#define SQ
1fdf0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
1fe00 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e  RNAL 0x01.#defin
1fe10 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
1fe20 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f  SQLFUNC  0x02.vo
1fe30 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
1fe40 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
1fe50 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
1fe60 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73  va_list);.void s
1fe70 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
1fe80 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f  rAccum*, u32, co
1fe90 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1fea0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
1feb0 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
1fec0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1fed0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
1fee0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1fef0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
1ff00 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71  _list);.char *sq
1ff10 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71  lite3MAppendf(sq
1ff20 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e  lite3*,char*,con
1ff30 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
1ff40 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1ff50 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e  E_TEST) || defin
1ff60 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
1ff70 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1ff80 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
1ff90 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
1ffa0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ffb0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
1ffc0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
1ffd0 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
1ffe0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
1fff0 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61  ./* Output forma
20000 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45  tting for SQLITE
20010 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49  _TESTCTRL_EXPLAI
20020 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  N */.#if defined
20030 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54  (SQLITE_ENABLE_T
20040 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76  REE_EXPLAIN).  v
20050 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20060 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a  inBegin(Vdbe*);.
20070 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20080 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65  plainPrintf(Vdbe
20090 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
200a0 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ...);.  void sql
200b0 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64  ite3ExplainNL(Vd
200c0 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
200d0 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28  ite3ExplainPush(
200e0 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
200f0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70  qlite3ExplainPop
20100 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
20110 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
20120 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  nish(Vdbe*);.  v
20130 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20140 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20  inSelect(Vdbe*, 
20150 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
20160 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
20170 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a  xpr(Vdbe*, Expr*
20180 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20190 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
201a0 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74  (Vdbe*, ExprList
201b0 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *);.  const char
201c0 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78 70   *sqlite3VdbeExp
201d0 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b  lanation(Vdbe*);
201e0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
201f0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
20200 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
20210 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
20220 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69  lect(A,B).# defi
20230 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
20240 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66  nExpr(A,B).# def
20250 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
20260 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a  inExprList(A,B).
20270 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20280 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29  ExplainFinish(X)
20290 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
202a0 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
202b0 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76  (X) 0.#endif...v
202c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
202d0 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
202e0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
202f0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
20300 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
20310 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
20320 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
20330 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
20340 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
20350 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
20360 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
20370 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20380 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
20390 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
203a0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
203b0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
203c0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
203d0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
203e0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
203f0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
20400 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
20410 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20420 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
20430 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
20440 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
20450 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
20460 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
20470 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
20480 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
20490 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
204a0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
204b0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
204c0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
204d0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
204e0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
204f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20500 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
20510 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
20520 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
20530 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
20540 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
20550 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
20560 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
20570 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
20580 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
20590 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
205a0 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
205b0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
205c0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
205d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
205e0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
205f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
20600 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
20610 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
20620 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
20630 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
20640 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
20650 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
20660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20670 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
20680 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
20690 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
206a0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
206b0 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
206c0 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
206d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
206e0 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
206f0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
20700 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20710 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
20720 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
20730 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
20740 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
20750 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
20760 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
20770 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
20780 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
20790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
207a0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
207b0 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
207c0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
207d0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
207e0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
207f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
20800 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
20810 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
20820 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
20830 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
20840 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
20850 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
20860 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
20870 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
20880 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
20890 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
208a0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
208b0 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
208c0 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
208d0 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
208e0 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
208f0 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
20900 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
20910 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
20920 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
20930 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
20940 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
20950 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20960 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
20970 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
20980 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
20990 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
209a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
209b0 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
209c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
209d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
209e0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
209f0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
20a00 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
20a10 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
20a20 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
20a30 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
20a40 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
20a50 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
20a60 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
20a70 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
20a80 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
20a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
20aa0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
20ab0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
20ac0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
20ad0 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
20ae0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
20af0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
20b00 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
20b10 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
20b20 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
20b30 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
20b40 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
20b50 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
20b60 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
20b70 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
20b80 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  se *);..#ifdef S
20b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
20ba0 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65  IN_TEST.# define
20bb0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
20bc0 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
20bd0 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
20be0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
20bf0 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
20c00 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
20c10 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
20c20 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
20c30 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
20c40 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
20c50 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
20c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
20c70 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
20c80 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
20c90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
20ca0 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
20cb0 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
20cc0 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
20cd0 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
20ce0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
20cf0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
20d00 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
20d10 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
20d20 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
20d30 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
20d40 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
20d50 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
20d60 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
20d70 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
20d80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
20d90 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
20da0 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
20db0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
20dc0 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
20dd0 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
20de0 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
20df0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
20e00 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
20e10 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
20e20 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
20e30 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
20e40 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
20e50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
20e60 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
20e70 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
20e80 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
20e90 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
20ea0 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
20eb0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
20ec0 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  B) 0.#endif..voi
20ed0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
20ee0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
20ef0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
20f00 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
20f10 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
20f20 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
20f30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20f40 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
20f50 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
20f60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20f70 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
20f80 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
20f90 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
20fa0 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
20fb0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20fc0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
20fd0 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
20fe0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20ff0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
21000 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
21010 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
21020 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
21030 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
21040 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
21050 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
21060 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
21070 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
21080 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
21090 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
210a0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
210b0 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
210c0 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
210d0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
210e0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
210f0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
21100 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
21110 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
21120 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
21130 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
21140 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
21150 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
21160 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
21170 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
21180 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
21190 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
211a0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
211b0 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
211c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
211d0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
21210 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
21220 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
21230 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
21240 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
21250 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
21260 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
21270 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
21280 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
21290 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
212a0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
212b0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
212c0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
212d0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
212e0 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
212f0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
21300 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
21310 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
21320 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
21330 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
21340 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
21350 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
21360 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
21370 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
21380 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
21390 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
213a0 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
213b0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
213c0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
213d0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
213e0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
21400 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
21410 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
21420 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
21430 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
21440 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
21450 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
21460 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
21470 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
21480 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
21490 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
214a0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
214b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
214c0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
214d0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
214e0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
214f0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
21500 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
21510 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
21520 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
21530 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
21540 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
21550 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
21560 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
21570 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21580 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
21590 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
215a0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
215b0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
215c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
215d0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
215e0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
215f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
21600 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
21610 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
21620 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
21630 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
21640 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
21650 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21660 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
21670 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
21680 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
21690 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
216a0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
216b0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
216c0 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
216d0 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
216e0 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
216f0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
21700 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
21710 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21720 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
21730 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
21740 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
21750 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
21760 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
21770 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
21780 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
21790 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
217a0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
217b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
217c0 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
217d0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
217e0 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
217f0 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
21800 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
21810 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
21820 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
21830 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
21840 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
21850 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
21860 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
21870 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
21880 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
21890 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
218a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
218b0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
218c0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
218d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
218e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
218f0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
21900 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
21910 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21920 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
21930 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
21940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21950 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
21960 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
21970 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
21980 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21990 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
219a0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
219b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
219c0 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
219d0 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
219e0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
219f0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
21a00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
21a10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21a20 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
21a30 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
21a40 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
21a50 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
21a60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
21a70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21a80 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
21a90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
21aa0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
21ab0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
21ac0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
21ad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
21ae0 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
21af0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
21b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21b10 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
21b20 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
21b30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
21b40 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
21b50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
21b60 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
21b70 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
21b80 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
21b90 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
21ba0 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
21bb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
21bc0 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
21bd0 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
21be0 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
21bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21c00 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
21c10 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
21c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21c30 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
21c40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
21c50 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
21c60 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
21c70 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21c80 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
21c90 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
21ca0 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
21cb0 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73  ,int isView,cons
21cc0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
21cd0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
21ce0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
21cf0 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20  Item(Parse*,int 
21d00 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72  isView,struct Sr
21d10 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
21d20 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
21d30 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
21d40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
21d50 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
21d60 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
21d70 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
21d80 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
21d90 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
21da0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
21db0 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
21dc0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
21dd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
21de0 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
21df0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
21e00 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
21e10 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
21e20 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
21e30 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
21e40 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
21e50 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72  ExprCompare(Expr
21e60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
21e70 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
21e80 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
21e90 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
21ea0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21eb0 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
21ec0 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  r(Expr*, Expr*, 
21ed0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21ee0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
21ef0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
21f00 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
21f10 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
21f20 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
21f30 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
21f40 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
21f50 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
21f60 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
21f70 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
21f80 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
21f90 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21fa0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
21fb0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
21fc0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
21fd0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
21fe0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
21ff0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
22000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
22010 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
22020 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
22030 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
22040 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
22050 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
22060 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
22070 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
22080 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
22090 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
220a0 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
220b0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
220c0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
220d0 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
220e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
220f0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
22100 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
22110 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
22120 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
22130 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
22140 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
22150 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
22160 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
22170 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
22180 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
22190 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
221a0 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
221b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
221c0 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
221d0 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
221e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
221f0 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
22200 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22210 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
22220 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
22230 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
22240 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
22250 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
22260 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
22270 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
22280 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22290 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
222a0 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ete(Parse*,Table
222b0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
222c0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
222d0 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
222e0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
222f0 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
22300 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22310 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  t, int*);.int sq
22320 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
22330 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
22340 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
22350 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
22360 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22370 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
22380 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
22390 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
223a0 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
223b0 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
223c0 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
223d0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22400 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
22410 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22420 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
22430 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
22440 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  nt,int,int,int*,
22450 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
22460 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
22470 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
22480 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22490 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
224a0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
224b0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
224c0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
224d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
224e0 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
224f0 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
22500 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
22510 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22520 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
22530 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
22540 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
22550 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
22560 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
22570 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
22580 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
22590 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
225a0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
225b0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
225c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
225d0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
225e0 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
225f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
22600 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
22610 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
22620 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
22630 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
22640 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
22650 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
22660 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
22670 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
22680 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
22690 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
226a0 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ect*,int);.void 
226b0 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e  sqlite3FuncDefIn
226c0 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68  sert(FuncDefHash
226d0 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75  *, FuncDef*);.Fu
226e0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
226f0 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
22700 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
22710 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  int,int,u8,u8);.
22720 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
22730 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
22740 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
22750 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
22760 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
22770 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
22780 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
22790 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  rGlobalFunctions
227a0 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
227b0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
227c0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
227d0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
227e0 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
227f0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
22800 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
22810 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
22820 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
22830 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
22840 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22850 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
22860 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
22870 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
22880 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
22890 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23   int);.#endif..#
228a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
228b0 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
228c0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
228d0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
228e0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
228f0 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
22900 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
22930 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22940 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
22950 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
22960 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
22970 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
22980 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
22990 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
229a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
229b0 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
229c0 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
229d0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
229e0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
229f0 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
22a00 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
22a10 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
22a20 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
22a30 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
22a40 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
22a50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
22a60 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
22a70 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
22a80 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
22a90 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
22ac0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
22ad0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
22ae0 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
22af0 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
22b00 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
22b10 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
22b20 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
22b30 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
22b40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
22b50 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
22b60 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
22b70 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
22b80 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
22b90 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
22ba0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
22bb0 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
22bc0 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e3*,Select*);.  
22bd0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
22be0 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
22bf0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
22c00 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c30 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
22c40 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
22c50 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
22c60 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
22c70 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
22c80 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
22c90 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
22ca0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
22cb0 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
22cc0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
22cd0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
22ce0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
22cf0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
22d00 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
22d10 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
22d20 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
22d30 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
22d40 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
22d50 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
22d60 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
22d70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
22d80 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
22d90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22da0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
22db0 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
22dc0 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
22dd0 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a  el : (p)).#else.
22de0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22df0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
22e00 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
22e10 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
22e20 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
22e30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
22e40 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
22e50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22e60 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
22e70 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
22e80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22e90 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
22ea0 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
22eb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22ec0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
22ed0 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
22ee0 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
22ef0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
22f00 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
22f10 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
22f20 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
22f30 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
22f40 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
22f50 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
22f60 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
22f70 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
22f80 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
22f90 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
22fa0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
22fb0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
22fc0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
22fd0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
22fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
22ff0 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
23000 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
23010 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
23020 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
23030 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
23040 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
23050 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
23060 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
23070 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
23080 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
23090 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
230a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
230b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
230c0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
230d0 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
230e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
230f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
23100 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
23110 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
23120 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
23130 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
23140 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
23150 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
23160 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
23170 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
23180 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
23190 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
231a0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
231b0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
231c0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
231d0 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
231e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
231f0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
23200 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
23210 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23220 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
23230 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
23240 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23250 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
23260 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
23270 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
23280 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
23290 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
232a0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
232b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
232c0 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
232d0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
232e0 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
232f0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
23300 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23310 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
23320 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
23330 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
23340 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
23350 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23360 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
23370 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
23380 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
23390 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
233a0 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
233b0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
233c0 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
233d0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
233e0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
233f0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
23400 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
23410 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
23420 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
23430 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73  nt nChar);.int s
23440 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
23450 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
23460 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
23470 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
23480 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
23490 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
234a0 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
234b0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
234c0 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
234d0 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
234e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
234f0 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
23500 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
23510 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
23520 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33  ndif.u64 sqlite3
23530 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45  LogEstToInt(LogE
23540 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  st);../*.** Rout
23550 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
23560 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
23570 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
23580 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
23590 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
235a0 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
235b0 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
235c0 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
235d0 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
235e0 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73    Code should us
235f0 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d  e the MACRO form
23600 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20  s below, as the 
23610 56 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e  Varint32 version
23620 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74  s.** are coded t
23630 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e  o assume the sin
23640 67 6c 65 20 62 79 74 65 20 63 61 73 65 20 69 73  gle byte case is
23650 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64   already handled
23660 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20   (which .** the 
23670 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29  MACRO form does)
23680 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
23690 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
236a0 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
236b0 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
236c0 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20  rint32(unsigned 
236d0 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20  char*, u32);.u8 
236e0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
236f0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
23700 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
23710 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
23720 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
23730 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
23740 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
23750 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
23760 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61  ;../*.** The hea
23770 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64 20  der of a record 
23780 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 65  consists of a se
23790 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65 2d  quence variable-
237a0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
237b0 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67 65  .** These intege
237c0 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c  rs are almost al
237d0 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61  ways small and a
237e0 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61 20  re encoded as a 
237f0 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20  single byte..** 
23800 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
23810 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e 74  cros take advant
23820 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74 6f  age this fact to
23830 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74 20   provide a fast 
23840 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65  encode.** and de
23850 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74 65  code of the inte
23860 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72 64  gers in a record
23870 20 68 65 61 64 65 72 2e 20 20 49 74 20 69 73 20   header.  It is 
23880 66 61 73 74 65 72 20 66 6f 72 20 74 68 65 20 63  faster for the c
23890 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68  ommon.** case wh
238a0 65 72 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ere the integer 
238b0 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  is a single byte
238c0 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74 74 6c  .  It is a littl
238d0 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74 68  e slower when th
238e0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73 20  e.** integer is 
238f0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  two or more byte
23900 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c 20  s.  But overall 
23910 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a  it is faster..**
23920 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
23930 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  g expressions ar
23940 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a  e equivalent:.**
23950 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
23960 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 20  te3GetVarint32( 
23970 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20  A, &B );.**     
23980 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56 61  x = sqlite3PutVa
23990 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
239a0 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67 65  **.**     x = ge
239b0 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
239c0 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70 75  );.**     x = pu
239d0 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
239e0 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  );.**.*/.#define
239f0 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
23a00 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
23a10 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
23a20 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
23a30 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
23a40 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
23a50 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
23a60 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
23a70 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
23a80 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
23a90 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
23aa0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
23ab0 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 28 41  e3PutVarint32((A
23ac0 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
23ad0 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
23ae0 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
23af0 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
23b00 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
23b10 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
23b20 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
23b30 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a  finityStr(Vdbe *
23b40 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64  , Index *);.void
23b50 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
23b60 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
23b70 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
23b80 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
23b90 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
23ba0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
23bb0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
23bc0 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
23bd0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
23be0 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
23bf0 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
23c00 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
23c10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
23c20 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
23c30 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
23c40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
23c50 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ror(sqlite3*, in
23c60 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
23c70 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..);.void *sqlit
23c80 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
23c90 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
23ca0 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
23cb0 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
23cc0 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
23cd0 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
23ce0 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
23cf0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
23d00 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
23d10 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 0a  d(SQLITE_TEST) .
23d20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
23d30 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
23d40 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
23d50 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
23d60 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
23d70 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
23d80 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
23d90 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
23da0 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
23db0 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
23dc0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
23dd0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
23de0 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
23df0 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
23e00 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
23e10 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
23e20 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
23e30 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
23e40 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
23e50 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
23e60 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
23e70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
23e80 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
23e90 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
23ea0 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
23eb0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
23ec0 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
23ed0 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
23ee0 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
23ef0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
23f00 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
23f10 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
23f20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
23f30 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
23f40 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
23f50 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
23f60 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
23f70 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
23f80 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
23f90 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
23fa0 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
23fb0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
23fc0 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
23fd0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
23fe0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
23ff0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
24000 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
24010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
24020 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
24030 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
24040 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24050 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
24060 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
24070 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
24080 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69  (const char *z,i
24090 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  nt);..const void
240a0 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
240b0 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
240c0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
240d0 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
240e0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
240f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
24100 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
24110 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
24120 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
24130 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
24140 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
24150 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
24160 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
24170 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
24180 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
24190 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
241a0 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
241b0 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
241c0 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
241d0 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  e3 *);.char *sql
241e0 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
241f0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
24200 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  id*, int, u8);.i
24210 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
24220 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
24230 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
24240 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
24250 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
24260 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
24270 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
24280 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
24290 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
242a0 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
242b0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
242c0 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
242d0 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
242e0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
242f0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
24300 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b  3UpperToLower[];
24310 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
24320 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
24330 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65  te3CtypeMap[];.e
24340 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65  xtern const Toke
24350 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65  n sqlite3IntToke
24360 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c  ns[];.extern SQL
24370 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53  ITE_WSD struct S
24380 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c  qlite3Config sql
24390 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65  ite3Config;.exte
243a0 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75  rn SQLITE_WSD Fu
243b0 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
243c0 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  3GlobalFunctions
243d0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
243e0 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e  _OMIT_WSD.extern
243f0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
24400 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
24410 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
24420 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
24430 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
24440 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24450 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
24460 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
24470 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
24480 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
24490 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
244a0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
244b0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
244c0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
244d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
244e0 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
244f0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
24500 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24510 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
24520 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
24530 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
24540 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
24550 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
24560 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
24570 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
24580 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
24590 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
245a0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
245b0 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
245c0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
245d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
245e0 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
245f0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
24600 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24610 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
24620 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
24630 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
24640 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
24650 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24660 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
24670 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
24680 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
24690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
246a0 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
246b0 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
246c0 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
246d0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
246e0 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
246f0 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
24700 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
24710 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
24720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
24730 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
24740 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
24750 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24760 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
24770 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
24780 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
24790 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
247a0 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
247b0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
247c0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
247d0 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
247e0 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
247f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24800 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
24810 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
24820 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
24830 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
24840 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
24850 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
24860 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
24870 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
24880 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24890 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
248a0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
248b0 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
248c0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
248d0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
248e0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
248f0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
24900 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
24910 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
24920 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
24930 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
24940 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
24950 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
24960 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
24970 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
24980 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
24990 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
249a0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
249b0 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
249c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
249d0 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
249e0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
249f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
24a00 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
24a10 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
24a20 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
24a30 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
24a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
24a50 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
24a60 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
24a70 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
24a80 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
24a90 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
24aa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
24ab0 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
24ac0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
24ad0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
24ae0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
24af0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
24b00 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
24b10 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64  *, Index*);.#ifd
24b20 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
24b30 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
24b40 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
24b50 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
24b60 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
24b70 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
24b80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
24b90 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
24ba0 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
24bb0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
24bc0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
24bd0 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
24be0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
24bf0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
24c00 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
24c10 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
24c20 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
24c30 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
24c40 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r.);.int sqlite3
24c50 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
24c60 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
24c70 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
24c80 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
24c90 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
24ca0 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
24cb0 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  cum*, char*, int
24cc0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24cd0 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
24ce0 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
24cf0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
24d00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
24d10 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72  cumAppendAll(Str
24d20 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
24d30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24d40 33 41 70 70 65 6e 64 53 70 61 63 65 28 53 74 72  3AppendSpace(Str
24d50 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61  Accum*,int);.cha
24d60 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
24d70 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
24d80 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
24d90 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
24da0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
24db0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
24dc0 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
24dd0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
24de0 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
24df0 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
24e00 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
24e10 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
24e20 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
24e30 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
24e40 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
24e50 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
24e60 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
24e70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
24e80 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  u8 *);..#ifdef S
24e90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
24ea0 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
24eb0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
24ec0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
24ed0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
24ee0 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61  ProbeSetValue(Pa
24ef0 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61  rse*,Index*,Unpa
24f00 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70  ckedRecord**,Exp
24f10 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b  r*,u8,int,int*);
24f20 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
24f30 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50  4ValueFromExpr(P
24f40 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38  arse*, Expr*, u8
24f50 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
24f60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24f70 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55  Stat4ProbeFree(U
24f80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b  npackedRecord*);
24f90 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
24fa0 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a  4Column(sqlite3*
24fb0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
24fc0 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  nt, int, sqlite3
24fd0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69  _value**);.#endi
24fe0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
24ff0 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
25000 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
25010 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  rser.*/.void *sq
25020 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
25030 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74  (void*(*)(size_t
25040 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
25050 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
25060 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
25070 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
25080 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
25090 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
250a0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
250b0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
250c0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
250d0 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
250e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
250f0 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
25100 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
25110 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
25120 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
25130 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
25140 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
25150 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
25160 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25170 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
25180 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
25190 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
251a0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
251b0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
251c0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
251d0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
251e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
251f0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
25200 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
25210 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
25220 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
25230 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
25240 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
25250 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
25260 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
25270 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
25280 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
25290 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
252a0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
252b0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
252c0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
252d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
252e0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
252f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25300 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
25310 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25320 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
25330 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
25340 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20  VtabLock(X) .#  
25350 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25360 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
25370 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
25380 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
25390 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
253a0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
253b0 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
253c0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
253d0 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
253e0 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
253f0 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
25400 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
25410 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
25420 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
25430 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
25440 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
25450 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
25460 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
25470 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
25480 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
25490 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
254a0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
254b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
254c0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
254d0 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
254e0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
254f0 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
25500 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
25510 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
25520 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
25530 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
25540 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
25550 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
25560 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
25570 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
25580 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
25590 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
255a0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
255b0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
255c0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
255d0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
255e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
255f0 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
25600 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
25610 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
25620 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ==0).#endif.void
25630 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
25640 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
25650 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
25660 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
25670 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
25680 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
25690 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
256a0 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
256b0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
256c0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
256d0 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
256e0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
256f0 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
25700 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
25710 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
25720 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
25730 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
25740 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
25750 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
25760 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
25770 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
25780 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
25790 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
257a0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
257b0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
257c0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
257d0 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
257e0 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
257f0 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
25800 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
25810 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
25820 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
25830 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
25840 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
25850 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
25860 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
25870 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
25880 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
25890 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
258a0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
258b0 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
258c0 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
258d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
258e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
258f0 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
25900 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
25910 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
25920 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
25930 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
25940 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
25950 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
25960 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
25970 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
25980 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
25990 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
259a0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
259b0 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
259c0 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
259d0 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
259e0 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
259f0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
25a00 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
25a10 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
25a20 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
25a30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25a40 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
25a50 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
25a60 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
25a70 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
25a80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
25a90 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
25aa0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
25ab0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
25ac0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
25ad0 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
25ae0 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
25af0 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
25b00 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
25b10 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
25b20 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
25b30 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
25b40 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
25b50 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
25b60 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
25b70 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
25b80 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
25b90 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
25ba0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
25bb0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,y).#endif../* D
25bc0 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
25bd0 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
25be0 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
25bf0 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
25c00 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
25c10 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
25c20 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
25c30 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
25c40 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
25c50 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
25c60 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
25c70 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
25c80 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
25c90 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
25ca0 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
25cb0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
25cc0 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
25cd0 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
25ce0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
25cf0 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
25d00 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
25d10 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69  ity is .** provi
25d20 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
25d30 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
25d40 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
25d50 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
25d60 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
25d70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25d80 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
25d90 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
25da0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
25db0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
25dc0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
25dd0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
25de0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
25df0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
25e00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
25e10 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
25e20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25e30 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
25e40 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
25e50 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
25e60 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
25e70 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
25e80 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
25e90 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
25ea0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
25eb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
25ec0 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
25ed0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
25ee0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
25ef0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
25f00 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
25f10 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
25f20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
25f30 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
25f40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
25f50 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
25f60 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
25f70 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
25f80 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
25f90 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
25fa0 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
25fb0 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
25fc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
25fd0 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
25fe0 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
25ff0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
26000 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
26010 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
26020 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
26030 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
26040 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
26050 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
26060 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
26070 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
26080 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
26090 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
260a0 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
260b0 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
260c0 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
260d0 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
260e0 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
260f0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
26100 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
26110 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26120 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
26130 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
26140 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
26150 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
26160 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
26170 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
26180 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
26190 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
261a0 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
261b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
261c0 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20  LTIN_TEST.** is 
261d0 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
261e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
261f0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
26200 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
26210 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
26220 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
26230 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
26240 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
26250 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
26260 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
26270 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
26280 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
26290 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
262a0 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  f..#define IN_IN
262b0 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
262c0 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e      1.#define IN
262d0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
262e0 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
262f0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
26300 41 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66  ASC       3.#def
26310 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
26320 45 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69  EX_DESC      4.i
26330 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
26340 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
26350 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23  xpr *, int*);..#
26360 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26370 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
26380 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
26390 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
263a0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
263b0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
263c0 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
263d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
263e0 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
263f0 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
26400 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
26410 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
26420 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
26430 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
26440 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
26450 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
26460 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
26470 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
26480 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
26490 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
264a0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
264b0 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
264c0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
264d0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
264e0 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
264f0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
26500 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
26510 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
26520 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
26530 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  ;..#if SQLITE_MA
26540 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
26550 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
26560 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65  rSetHeight(Parse
26570 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
26580 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  p);.  int sqlite
26590 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
265a0 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
265b0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
265c0 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
265d0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
265e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
265f0 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79  xprSetHeight(x,y
26600 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26610 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
26620 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
26630 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
26640 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
26650 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
26660 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
26670 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
26680 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
26690 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
266a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
266b0 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
266c0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
266d0 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
266e0 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
266f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26700 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
26710 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
26720 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
26730 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
26740 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
26750 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26760 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
26770 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
26780 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
26790 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
267a0 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
267b0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
267c0 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
267d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
267e0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
267f0 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
26800 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
26810 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
26820 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
26830 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
26840 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
26850 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
26860 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
26870 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
26880 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
26890 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
268a0 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
268b0 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64  ssages. .*/.#ifd
268c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
268d0 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
268e0 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
268f0 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
26900 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
26910 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
26920 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
26930 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
26940 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
26950 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  (*sqlite3IoTrace
26960 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
26970 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
26980 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
26990 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
269a0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
269b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
269c0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
269d0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
269e0 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
269f0 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
26a00 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
26a10 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
26a20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
26a30 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
26a40 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
26a50 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
26a60 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
26a70 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
26a80 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26a90 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
26aa0 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
26ab0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
26ac0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
26ad0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
26ae0 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
26af0 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
26b00 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
26b10 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
26b20 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
26b30 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
26b40 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
26b50 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
26b60 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
26b70 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
26b80 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
26b90 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
26ba0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
26bb0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
26bc0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
26bd0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
26be0 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
26bf0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
26c00 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
26c10 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
26c20 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
26c30 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
26c40 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
26c50 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
26c60 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
26c70 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
26c80 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
26c90 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
26ca0 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
26cb0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
26cc0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
26cd0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
26ce0 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
26cf0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
26d00 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
26d10 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
26d20 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
26d30 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
26d40 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
26d50 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
26d60 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
26d70 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
26d80 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
26d90 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
26da0 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
26db0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
26dc0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
26dd0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
26de0 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
26df0 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
26e00 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
26e10 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
26e20 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
26e30 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
26e40 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
26e50 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
26e60 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
26e70 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
26e80 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
26e90 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
26ea0 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
26eb0 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74   .**.** All of t
26ec0 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
26ed0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
26ee0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
26ef0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
26f00 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
26f10 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
26f20 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
26f30 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
26f40 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
26f50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
26f60 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
26f70 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
26f80 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
26f90 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
26fa0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
26fb0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
26fc0 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
26fd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
26fe0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
26ff0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
27000 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27010 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
27020 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
27030 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
27040 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
27050 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
27060 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
27070 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
27080 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
27090 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
270a0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
270b0 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68  E  0x02  /* Migh
270c0 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
270d0 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  aside memory */.
270e0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
270f0 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
27100 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
27110 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
27120 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
27130 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
27140 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
27150 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
27160 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20   MEMTYPE_DB     
27170 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65      0x10  /* Use
27180 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  s sqlite3DbMallo
27190 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61  c, not sqlite_ma
271a0 6c 6c 6f 63 20 2a 2f 0a 0a 0a 23 69 66 20 28 53  lloc */...#if (S
271b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50  QLITE_ENABLE_APP
271c0 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66  LE_SPI>0) && def
271d0 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
271e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
271f0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
27200 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
27210 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68   used to hold th
27220 65 20 70 72 6f 63 65 73 73 20 49 44 0a 2a 2a 20  e process ID.** 
27230 61 6e 64 20 72 65 74 75 72 6e 2d 62 79 2d 72 65  and return-by-re
27240 66 65 72 65 6e 63 65 20 6c 6f 63 6b 73 74 61 74  ference lockstat
27250 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 53 51  e value.  The SQ
27260 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53  LITE_FCNTL_LOCKS
27270 54 41 54 45 5f 50 49 44 0a 2a 2a 20 72 65 71 75  TATE_PID.** requ
27280 69 72 65 73 20 74 68 65 20 34 74 68 20 61 72 67  ires the 4th arg
27290 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
272a0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 74 6f  _file_control to
272b0 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
272c0 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
272d0 6f 66 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20  of LockstatePID 
272e0 69 6e 69 74 69 61 6c 69 7a 65 64 20 77 69 74 68  initialized with
272f0 20 61 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 2e   a LockstatePID.
27300 70 69 64 20 76 61 6c 75 65 20 65 71 75 61 6c 0a  pid value equal.
27310 2a 2a 20 74 6f 20 61 20 70 72 6f 63 65 73 73 20  ** to a process 
27320 49 44 20 74 6f 20 62 65 20 74 65 73 74 65 64 2c  ID to be tested,
27330 20 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20   or the special 
27340 76 61 6c 75 65 20 53 51 4c 49 54 45 5f 4c 4f 43  value SQLITE_LOC
27350 4b 53 54 41 54 45 5f 41 4e 59 50 49 44 0a 2a 2a  KSTATE_ANYPID.**
27360 20 54 68 65 20 4c 6f 63 6b 73 74 61 74 65 2e 73   The Lockstate.s
27370 74 61 74 65 20 76 61 6c 75 65 20 69 73 20 61 6c  tate value is al
27380 77 61 79 73 20 73 65 74 20 74 6f 20 6f 6e 65 20  ways set to one 
27390 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
273a0 20 76 61 6c 75 65 73 0a 2a 2a 20 77 68 65 6e 20   values.** when 
273b0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
273c0 74 72 6f 6c 20 72 65 74 75 72 6e 73 3a 0a 2a 2a  trol returns:.**
273d0 20 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f   .**   SQLITE_LO
273e0 43 4b 53 54 41 54 45 5f 4f 46 46 20 20 20 20 6e  CKSTATE_OFF    n
273f0 6f 20 61 63 74 69 76 65 20 73 71 6c 69 74 65 20  o active sqlite 
27400 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68  file locks match
27410 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
27420 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c  id.**   SQLITE_L
27430 4f 43 4b 53 54 41 54 45 5f 4f 4e 20 20 20 20 20  OCKSTATE_ON     
27440 61 63 74 69 76 65 20 73 71 6c 69 74 65 20 66 69  active sqlite fi
27450 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74  le locks match t
27460 68 65 20 73 70 65 63 69 66 69 65 64 20 70 69 64  he specified pid
27470 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43  .**   SQLITE_LOC
27480 4b 53 54 41 54 45 5f 4e 4f 54 41 44 42 20 70 61  KSTATE_NOTADB pa
27490 74 68 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  th points to a f
274a0 69 6c 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ile that is not 
274b0 61 6e 20 73 71 6c 69 74 65 20 64 62 20 66 69 6c  an sqlite db fil
274c0 65 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f  e.**   SQLITE_LO
274d0 43 4b 53 54 41 54 45 5f 45 52 52 4f 52 20 20 70  CKSTATE_ERROR  p
274e0 61 74 68 20 77 61 73 20 6e 6f 74 20 76 61 69 6c  ath was not vail
274f0 64 20 6f 72 20 77 61 73 20 75 6e 72 65 61 64 61  d or was unreada
27500 62 6c 65 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ble.*/.typedef s
27510 74 72 75 63 74 20 4c 6f 63 6b 73 74 61 74 65 50  truct LockstateP
27520 49 44 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 3b  ID LockstatePID;
27530 0a 73 74 72 75 63 74 20 4c 6f 63 6b 73 74 61 74  .struct Lockstat
27540 65 50 49 44 20 7b 0a 20 20 70 69 64 5f 74 20 70  ePID {.  pid_t p
27550 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
27560 20 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 49      /* Process I
27570 44 20 74 6f 20 74 65 73 74 20 2a 2f 0a 20 20 69  D to test */.  i
27580 6e 74 20 73 74 61 74 65 3b 20 20 20 20 20 20 20  nt state;       
27590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
275a0 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f   state of the lo
275b0 63 6b 20 28 72 65 74 75 72 6e 20 76 61 6c 75 65  ck (return value
275c0 29 20 2a 2f 0a 7d 3b 0a 0a 23 65 6e 64 69 66 0a  ) */.};..#endif.
275d0 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
275e0 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.