/ Hex Artifact Content
Login

Artifact 3b17ba74eec22781f51e7b3e4c73d2cbd458f89b:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
16b0: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
16c0: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
16d0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
16e0: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
16f0: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1700: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1710: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1720: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1730: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1740: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1750: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1760: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1770: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1780: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1790: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
17a0: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
17b0: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
17c0: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
17d0: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
17e0: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
17f0: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1800: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1810: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1820: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1830: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1840: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1850: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1860: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1870: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1880: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1890: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
18a0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
18b0: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
18c0: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
18d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
18e0: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
18f0: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1910: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1920: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1930: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1940: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1950: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1960: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1970: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1980: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1990: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
19a0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
19b0: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
19c0: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
19d0: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
19e0: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
19f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1a00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1a10: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1a20: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45  ** The SQLITE_DE
1a30: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
1a40: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1a50: 66 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20  fined as either 
1a60: 30 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65  0 or 1..** It de
1a70: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
1a80: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74   or not the feat
1a90: 75 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  ures related to 
1aa0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  .** SQLITE_CONFI
1ab0: 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20  G_MEMSTATUS are 
1ac0: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ad0: 61 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69  ault or not. Thi
1ae0: 73 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62  s value can.** b
1af0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  e overridden at 
1b00: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
1b10: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  e sqlite3_config
1b20: 28 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21  () API..*/.#if !
1b30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b40: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1b50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b60: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1b70: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1b80: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1b90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba0: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1bb0: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1bc0: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1bd0: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1be0: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1bf0: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1c00: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1c10: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1c20: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1c30: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1c40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1c50: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1c60: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1c70: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1c80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1c90: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1ca0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1cb0: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1cc0: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1cd0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1ce0: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1cf0: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1d00: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1d10: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1d20: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1d30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1d40: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1d50: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1d60: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1d70: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1d80: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1d90: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
1da0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
1db0: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
1dc0: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
1dd0: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
1de0: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
1df0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
1e00: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
1e10: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
1e20: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
1e30: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1e40: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1e50: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1e60: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1e70: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1e80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1e90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1ea0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1eb0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
1ec0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1ed0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
1ee0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1ef0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1f00: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1f10: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1f40: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1f50: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1f60: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1f70: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1f80: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1f90: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
1fa0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
1fb0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
1fc0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
1fd0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1fe0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1ff0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2010: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2020: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2030: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2040: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2050: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
2060: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2070: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
2080: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2090: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
20a0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
20b0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
20c0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
20d0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
20e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
20f0: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2100: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2110: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2120: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2130: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
2140: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2150: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
2160: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
2170: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
2180: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
2190: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
21a0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
21b0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
21c0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
21d0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
21e0: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
21f0: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2200: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2210: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2220: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2230: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
2240: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
2250: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
2260: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
2270: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
2280: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
2290: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
22a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
22b0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
22c0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
22d0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
22e0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
22f0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2300: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2310: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2320: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2330: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
2340: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
2350: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
2360: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
2370: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
2380: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
2390: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
23a0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
23b0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
23c0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23d0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
23e0: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
23f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2400: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2410: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2420: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2430: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
2440: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
2450: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
2460: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
2470: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
2480: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
2490: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
24a0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
24b0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
24d0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
24e0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24f0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2500: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2510: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2520: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2530: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2540: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2550: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2560: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2570: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2580: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2590: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
25a0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
25c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
25d0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
25e0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
25f0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2600: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2610: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2620: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2630: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
2640: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2650: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2660: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2670: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2680: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2690: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
26a0: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
26b0: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
26c0: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
26d0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
26e0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
26f0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2700: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2710: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2720: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2730: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2740: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2750: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2760: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2770: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2780: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2790: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
27a0: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
27b0: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
27c0: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
27d0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
27e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
27f0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2800: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2810: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2820: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2830: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2840: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2850: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2860: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2870: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2880: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2890: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
28a0: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
28b0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
28c0: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28d0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
28e0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
28f0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2900: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2910: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2920: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2930: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2940: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2950: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2960: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2970: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2980: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2990: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
29a0: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
29b0: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
29c0: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
29d0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
29e0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
29f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2a00: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2a10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2a20: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2a30: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2a40: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2a50: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2a60: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2a70: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2a80: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2a90: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2aa0: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2ab0: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2ac0: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2ad0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2ae0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2af0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2b00: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2b10: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2b20: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2b30: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2b40: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2b50: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2b60: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2b70: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2b80: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2b90: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2ba0: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2bb0: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2bc0: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2bd0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2be0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2bf0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2c00: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2c10: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2c20: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2c30: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2c40: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2c50: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2c60: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2c70: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2c80: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2c90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2ca0: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2cb0: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2cc0: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2cd0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ce0: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2cf0: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2d00: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2d10: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2d20: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2d30: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2d40: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2d50: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2d60: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2d70: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2d80: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2d90: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
2da0: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
2db0: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
2dc0: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
2dd0: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
2de0: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
2df0: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
2e00: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
2e10: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
2e20: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
2e30: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
2e40: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
2e50: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
2e60: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
2e70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
2e80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2e90: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
2ea0: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
2eb0: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
2ec0: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
2ed0: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
2ee0: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
2ef0: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
2f00: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
2f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2f20: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2f30: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2f40: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
2f50: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
2f60: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
2f70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
2f80: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
2f90: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
2fa0: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
2fb0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2fc0: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
2fd0: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
2fe0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2ff0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3000: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3010: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3020: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3030: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
3040: 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e  he input is a in
3050: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
3060: 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69  o large.** to fi
3070: 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54  t in 32-bits.  T
3080: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
3090: 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69  d inside of vari
30a0: 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a  ous testcase().*
30b0: 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69  * macros to veri
30c0: 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20  fy that we have 
30d0: 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f  tested SQLite fo
30e0: 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70  r large-file sup
30f0: 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  port..*/.#define
3100: 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20   IS_BIG_INT(X)  
3110: 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66  (((X)&~(i64)0xff
3120: 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a  ffffff)!=0)../*.
3130: 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c  ** The macro unl
3140: 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e  ikely() is a hin
3150: 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73  t that surrounds
3160: 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78   a boolean.** ex
3170: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3180: 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20   usually false. 
3190: 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20   Macro likely() 
31a0: 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62  surrounds.** a b
31b0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
31c0: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
31d0: 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68  y true.  These h
31e0: 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69  ints could,.** i
31f0: 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65  n theory, be use
3200: 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  d by the compile
3210: 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65  r to generate be
3220: 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a  tter code, but.*
3230: 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79  * currently they
3240: 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e   are just commen
3250: 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61  ts for human rea
3260: 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ders..*/.#define
3270: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58   likely(X)    (X
3280: 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  ).#define unlike
3290: 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63  ly(X)  (X)..#inc
32a0: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
32b0: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
32c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
32d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
32e0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
32f0: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
3300: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
3310: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
3320: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
3330: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
3340: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
3350: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
3360: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
3370: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
3380: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
3390: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
33a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
33b0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
33c0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
33d0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
33e0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
33f0: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
3410: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
3420: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3430: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
3440: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
3450: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
3460: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
3470: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3480: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
3490: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
34a0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
34b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
34c0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
34d0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
34e0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
34f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3500: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3520: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
3530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
3540: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
3550: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
3560: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
3570: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
3580: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
3590: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
35a0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
35b0: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
35c0: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
35d0: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
35e0: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
35f0: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
3600: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
3610: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
3620: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
3630: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
3640: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3650: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3660: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
3670: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
3680: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
3690: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
36a0: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
36b0: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
36c0: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
36e0: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
36f0: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
3700: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
3710: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
3720: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
3730: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
3740: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
3750: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
3760: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
3770: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
3780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3790: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
37a0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
37b0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
37c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
37d0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
37e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
37f0: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
3800: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
3810: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
3820: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
3830: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
3840: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3850: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
3860: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3880: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
3890: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
38a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
38b0: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
38c0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
38d0: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
38e0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
38f0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
3900: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
3910: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3930: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
3940: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
3950: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
3960: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
3970: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
3980: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3990: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
39a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
39b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
39c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
39d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
39e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
39f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3a00: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3a10: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3a20: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
3a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
3a40: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
3a50: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
3a60: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
3a70: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rs..*/.#define M
3a80: 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29  IN(A,B) ((A)<(B)
3a90: 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e  ?(A):(B)).#defin
3aa0: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
3ab0: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a  (B)?(A):(B))../*
3ac0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ad0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
3ae0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
3af0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
3b00: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
3b10: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
3b20: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
3b30: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
3b40: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
3b50: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
3b60: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
3b70: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
3b80: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
3b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
3ba0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
3bb0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
3bc0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
3bd0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
3be0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
3bf0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
3c00: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
3c10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
3c20: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
3c30: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
3c40: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
3c50: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
3c60: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
3c70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
3c80: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
3c90: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
3ca0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
3cb0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
3cc0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
3cd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
3ce0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
3cf0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3d00: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
3d10: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
3d20: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3d30: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
3d40: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
3d50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3d60: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
3d70: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3d80: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
3d90: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
3da0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3db0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
3dc0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
3dd0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3de0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
3df0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
3e00: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3e10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3e20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
3e30: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
3e40: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
3e50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3e60: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
3e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e80: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
3e90: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
3ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
3eb0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3ec0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
3ed0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
3ee0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
3ef0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
3f00: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
3f10: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3f20: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
3f30: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
3f40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
3f50: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
3f60: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
3f70: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
3f80: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
3f90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3fa0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3fb0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
3fc0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
3fd0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3fe0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
3ff0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4000: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4010: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4020: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4030: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4040: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4050: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4060: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4070: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
4080: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
4090: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
40a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
40b0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
40c0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
40d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
40e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
40f0: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4100: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4120: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4130: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4140: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4150: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4160: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4170: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
4180: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
4190: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
41a0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
41b0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
41c0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
41d0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
41e0: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
41f0: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4200: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4210: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4220: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4240: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4250: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4260: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4270: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
4280: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
42a0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
42b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
42c0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
42d0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
42e0: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
42f0: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4300: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4310: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4320: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4330: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4340: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4350: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4360: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4370: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
4380: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
4390: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
43a0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
43b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
43c0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
43d0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
43e0: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
43f0: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4400: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4410: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4420: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4430: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4440: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4450: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4460: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4470: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
4480: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
4490: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
44a0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
44b0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
44c0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
44d0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
44e0: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
44f0: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4500: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4510: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4520: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4530: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4540: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4550: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4560: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4570: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4580: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74  e LogEst quantat
4590: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
45a0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
45b0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
45c0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
45d0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
45e0: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
45f0: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4600: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4610: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4620: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4630: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4640: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4650: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4660: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4670: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4680: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4690: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
46a0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
46b0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
46c0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
46d0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
46e0: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
46f0: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4700: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4710: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4720: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4730: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4740: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4750: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4760: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4770: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4780: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4790: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
47a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
47b0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
47c0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
47d0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
47e0: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
47f0: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4800: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
4810: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
4820: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
4830: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
4840: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
4850: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
4860: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
4870: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
4880: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
4890: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
48a0: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
48b0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
48c0: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
48d0: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
48e0: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
48f0: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
4900: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
4910: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
4920: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4930: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
4940: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
4950: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
4960: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
4970: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4980: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4990: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
49a0: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
49b0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
49c0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
49d0: 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29  f (defined(i386)
49e0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
49f0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
4a00: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
4a10: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
4a20: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
4a30: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
4a40: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
4a50: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
4a60: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
4a70: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
4a80: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
4a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
4aa0: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
4ab0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
4ac0: 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  )) && !defined(S
4ad0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
4ae0: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
4af0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
4b00: 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66  ER    1234.# def
4b10: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
4b20: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
4b30: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
4b40: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
4b50: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
4b60: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
4b70: 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16LE.#endif.#if 
4b80: 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20  (defined(sparc) 
4b90: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4ba0: 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26  ppc__))  \.    &
4bb0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
4bc0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4bd0: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
4be0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
4bf0: 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20    4321.# define 
4c00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4c10: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
4c20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
4c30: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
4c40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4c50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
4c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45  ined(SQLITE_BYTE
4c80: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
4c90: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
4ca0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d      0     /* 0 m
4cb0: 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74  eans "unknown at
4cc0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a   compile-time" *
4cd0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
4ce0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
4cf0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
4d00: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
4d10: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
4d20: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
4d30: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
4d40: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
4d50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4d60: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4d70: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4d80: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4d90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4da0: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4db0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4dc0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4dd0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4de0: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4df0: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
4e00: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
4e10: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
4e20: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
4e30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
4e40: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
4e50: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4e60: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4e70: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4e80: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4e90: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4ea0: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4eb0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4ec0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4ed0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4ee0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4ef0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
4f00: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
4f10: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
4f20: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
4f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4f40: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
4f50: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4f60: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4f70: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4f80: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4f90: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4fa0: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4fb0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4fc0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4fd0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4fe0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4ff0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
5000: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
5010: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
5020: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
5030: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
5040: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
5050: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
5060: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
5070: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
5080: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
5090: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
50a0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
50b0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
50c0: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
50d0: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
50e0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
50f0: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
5100: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
5110: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
5120: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
5130: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5140: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
5150: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
5160: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
5170: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
5180: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
5190: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
51a0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
51b0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
51c0: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
51d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
51e0: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
51f0: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
5200: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
5210: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
5220: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
5230: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
5240: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
5250: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5260: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
5270: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5280: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
5290: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
52a0: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
52b0: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
52c0: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
52d0: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
52e0: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
52f0: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
5300: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
5310: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
5320: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
5330: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5340: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
5350: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5360: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
5370: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
5380: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
5390: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
53a0: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
53b0: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
53c0: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
53d0: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
53e0: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
53f0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
5400: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
5410: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5420: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
5430: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
5440: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
5450: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5460: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
5470: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
5480: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5490: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
54a0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
54b0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
54c0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
54d0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
54e0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
54f0: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
5500: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
5510: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
5520: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
5530: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
5540: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
5550: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
5560: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
5570: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
5580: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5590: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
55c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
55d0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
55e0: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
55f0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5600: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
5610: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5620: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
5630: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
5640: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5650: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
5660: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5670: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
5680: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
56a0: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
56b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
56c0: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
56d0: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
56e0: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
56f0: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
5700: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5710: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
5720: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
5730: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
5740: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5750: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
5760: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5770: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
5780: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5790: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
57a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
57b0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
57c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
57d0: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
57e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
57f0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
5800: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5810: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
5820: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
5830: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5840: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
5850: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5870: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5880: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5890: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
58a0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
58b0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
58c0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
58d0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
58e0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
58f0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5900: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5910: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5920: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5930: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5940: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5950: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5960: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5970: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5980: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5990: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
59a0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
59b0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
59c0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
59d0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
59e0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
59f0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5a00: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5a10: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5a20: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5a30: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5a40: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5a50: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5a60: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5a70: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5a80: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5a90: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5aa0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5ab0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5ac0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5ad0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5ae0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5af0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5b00: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5b10: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
5b20: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
5b30: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
5b40: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
5b50: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5b60: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5b70: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5b80: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5b90: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5ba0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5bb0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5bc0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5bd0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5be0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5bf0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
5c00: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
5c10: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
5c20: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
5c30: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
5c40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
5c50: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5c60: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5c70: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5c80: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5c90: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5ca0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5cb0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5cc0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5cd0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5ce0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5cf0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
5d00: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
5d10: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
5d20: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
5d30: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
5d40: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
5d50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5d60: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5d70: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5d80: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5d90: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5da0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5db0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5dc0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5dd0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5de0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5df0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
5e00: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
5e10: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
5e20: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
5e30: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
5e40: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
5e50: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5e60: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5e70: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5e80: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5e90: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5ea0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5eb0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5ec0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5ed0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5ee0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5ef0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
5f00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5f10: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
5f20: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
5f30: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
5f40: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
5f50: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5f60: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5f70: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5f80: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5f90: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5fa0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5fb0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5fc0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5fd0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5fe0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5ff0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6000: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6010: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6020: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6030: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6040: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6050: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6060: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6070: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6080: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6090: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
60a0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
60b0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
60c0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
60d0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
60e0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
60f0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
6100: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
6110: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6120: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6130: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6140: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6150: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6160: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6170: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6180: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6190: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
61a0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
61b0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
61c0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
61d0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
61e0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
61f0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
6200: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
6210: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6220: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6230: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6240: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6250: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6260: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6280: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6290: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
62a0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
62b0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
62c0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
62d0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
62e0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
62f0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
6300: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
6310: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6320: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6330: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6340: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6350: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6360: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6370: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6380: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6390: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
63a0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
63b0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
63c0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
63d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
63e0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
63f0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
6400: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
6410: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6420: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6430: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6440: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6450: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6460: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6470: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6480: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6490: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
64a0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
64b0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
64c0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
64d0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
64e0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
64f0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
6500: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
6510: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6520: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6530: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6540: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6550: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6560: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6570: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6580: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6590: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
65a0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
65b0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
65c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
65d0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
65e0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
65f0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6600: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6610: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6620: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6630: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6640: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6650: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6660: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6670: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6680: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6690: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
66a0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
66b0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
66c0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
66d0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
66e0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
66f0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6700: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6710: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6720: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6730: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6740: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6750: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6760: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6770: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6780: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6790: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
67a0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
67b0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
67c0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
67d0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
67e0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
67f0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6800: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6810: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6820: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6830: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6840: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6850: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6860: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6870: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6880: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6890: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
68a0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
68b0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
68c0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
68d0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
68e0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
68f0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6900: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6910: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6920: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6930: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6940: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6950: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6960: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6970: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6980: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
69a0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
69b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69c0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
69d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69e0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
69f0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6a00: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6a10: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6a20: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6a40: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6a50: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6a60: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6a70: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6a80: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6a90: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6aa0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6ab0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6ac0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6ad0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6ae0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6af0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6b00: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6b10: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
6b20: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
6b30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6b40: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
6b50: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
6b60: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
6b70: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
6b80: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6b90: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6ba0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6bb0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6bc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6bd0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6be0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6bf0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
6c00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c10: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
6c20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c30: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
6c40: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
6c50: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
6c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c70: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
6c80: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6c90: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6ca0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cb0: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6cc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cd0: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6ce0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6cf0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
6d00: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
6d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
6d20: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
6d30: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
6d40: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
6d50: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
6d60: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
6d70: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
6d80: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6d90: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6da0: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6db0: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
6dc0: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
6dd0: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
6de0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
6df0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
6e00: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
6e10: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
6e20: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
6e30: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
6e40: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
6e50: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
6e60: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
6e70: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
6e80: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
6e90: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
6ea0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
6eb0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
6ec0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
6ed0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
6ee0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
6ef0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
6f00: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
6f10: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
6f20: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
6f30: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
6f40: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
6f50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6f60: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
6f70: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
6f80: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
6f90: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
6fa0: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
6fb0: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
6fc0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
6fd0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
6fe0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
6ff0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7000: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7010: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
7020: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
7030: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
7040: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
7050: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
7060: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
7070: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
7080: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
7090: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
70a0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
70b0: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
70c0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
70d0: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
70e0: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
70f0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
7100: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
7110: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
7120: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
7130: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
7140: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
7150: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
7160: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
7170: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7180: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
7190: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
71a0: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
71b0: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
71c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
71d0: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
71e0: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
71f0: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
7200: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
7210: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
7220: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
7230: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
7240: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
7250: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
7260: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
7270: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
7280: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
7290: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
72a0: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
72b0: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
72c0: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
72d0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
72e0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
72f0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
7300: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
7310: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
7320: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
7330: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
7340: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
7350: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
7360: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
7370: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
7380: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
7390: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
73a0: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
73b0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
73c0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
73d0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
73e0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
73f0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
7400: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7410: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
7420: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
7430: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
7440: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
7450: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
7460: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
7470: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
7480: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
7490: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
74a0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
74b0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
74c0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
74d0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
74e0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
74f0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
7500: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
7510: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
7520: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
7530: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
7540: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
7550: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7560: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
7570: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7580: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
7590: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
75a0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
75b0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
75c0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
75d0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
75e0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
75f0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
7600: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
7610: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
7620: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
7630: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
7640: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
7650: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
7660: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
7670: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
7680: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
7690: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
76a0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
76b0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
76d0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
76e0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
76f0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  se */.  u16 flag
7700: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
7710: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
7720: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
7730: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
7740: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
7750: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
7760: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
7770: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
7780: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
7790: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
77a0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
77b0: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
77c0: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
77d0: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
77e0: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
77f0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
7800: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
7810: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  ma->flags&(P))==
7820: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
7830: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
7840: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
7850: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
7860: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7870: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7880: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7890: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
78a0: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
78b0: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
78c0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
78d0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
78e0: 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  a->flags&=~(P)..
78f0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
7900: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
7910: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
7920: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
7930: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
7940: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
7950: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
7960: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
7970: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
7980: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
7990: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
79a0: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
79b0: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
79c0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
79d0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
79e0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
79f0: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
7a00: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
7a10: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
7a20: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
7a30: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
7a40: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
7a50: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
7a60: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
7a70: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
7a80: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
7a90: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
7aa0: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
7ab0: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
7ac0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
7ad0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
7ae0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
7af0: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
7b00: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
7b10: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
7b20: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
7b30: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
7b40: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
7b50: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
7b60: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
7b70: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
7b80: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
7b90: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
7ba0: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
7bb0: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
7bc0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
7bd0: 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a  GER_DEPTH+1)../*
7be0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
7bf0: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
7c00: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
7c10: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
7c20: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
7c30: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
7c40: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
7c50: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
7c60: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
7c70: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
7c80: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7c90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7ca0: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
7cb0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
7cc0: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
7cd0: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
7ce0: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
7cf0: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
7d00: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
7d10: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
7d20: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
7d30: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
7d40: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
7d50: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
7d60: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
7d70: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
7d80: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
7d90: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7da0: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
7db0: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
7dc0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
7dd0: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
7de0: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
7df0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
7e00: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
7e10: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
7e20: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
7e30: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
7e40: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
7e50: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
7e60: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
7e70: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
7e80: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7e90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7ea0: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
7eb0: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
7ec0: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
7ed0: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
7ee0: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
7ef0: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
7f00: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
7f10: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
7f20: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
7f30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
7f40: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
7f50: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
7f60: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
7f70: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
7f80: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
7f90: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
7fa0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
7fb0: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
7fc0: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
7fd0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
7fe0: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
7ff0: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
8000: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
8010: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
8020: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
8030: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
8040: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
8050: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
8060: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
8070: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8080: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
8090: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
80a0: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
80b0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
80c0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
80d0: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
80e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
80f0: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
8100: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
8110: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
8120: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
8130: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
8140: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
8150: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
8160: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
8170: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
8180: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
8190: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
81a0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
81b0: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
81c0: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
81d0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
81e0: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
81f0: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
8200: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
8210: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
8220: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
8230: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
8240: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
8250: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
8260: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
8270: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
8280: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
8290: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
82a0: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
82b0: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
82c0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
82d0: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
82e0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
82f0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
8300: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
8310: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
8320: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
8330: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
8340: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
8350: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
8360: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
8370: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
8380: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
8390: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
83a0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
83b0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
83c0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
83d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
83e0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
83f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8400: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
8410: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
8420: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
8430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8440: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
8450: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
8460: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
8470: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
8480: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
8490: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
84a0: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
84b0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
84c0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
84d0: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
84e0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
84f0: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
8500: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
8510: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
8520: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
8530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
8540: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
8550: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8570: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
8580: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
8590: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
85a0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
85b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
85c0: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
85d0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
85e0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8600: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
8610: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
8620: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
8630: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
8640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
8650: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
8660: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
8670: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
8680: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
8690: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
86a0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
86b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
86c0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
86d0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
86e0: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
86f0: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
8700: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8720: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
8730: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
8740: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
8750: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8770: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
8780: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
8790: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
87a0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
87b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
87c0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
87d0: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
87e0: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
87f0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
8800: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
8810: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
8820: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
8830: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
8840: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
8850: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
8860: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
8870: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
8880: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
8890: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
88a0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
88b0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
88c0: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
88d0: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
88e0: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
88f0: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
8900: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
8910: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
8920: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
8930: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
8940: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
8950: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
8960: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
8970: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
8980: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
8990: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
89a0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
89b0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
89c0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
89d0: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
89e0: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
89f0: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
8a00: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
8a10: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
8a20: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a40: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
8a50: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
8a60: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
8a70: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
8aa0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
8ab0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
8ac0: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
8ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
8ae0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
8af0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
8b00: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
8b10: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
8b20: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
8b30: 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  mits */.  struct
8b40: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
8b50: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
8b60: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
8b70: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
8b80: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
8b90: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
8ba0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
8bb0: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
8bc0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
8bd0: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8bf0: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
8c00: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
8c10: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
8c20: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
8c30: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
8c40: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
8c50: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
8c60: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
8c70: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
8c80: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
8c90: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
8ca0: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
8cb0: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
8cc0: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
8cd0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8ce0: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
8cf0: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
8d00: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d20: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
8d30: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
8d40: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
8d50: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d70: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
8d80: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
8d90: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
8da0: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8dc0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
8dd0: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
8de0: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
8df0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
8e00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8e10: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
8e20: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
8e30: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
8e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8e50: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
8e60: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
8e70: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
8e80: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
8e90: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
8ea0: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
8eb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
8ec0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8ee0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
8ef0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
8f00: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
8f10: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
8f20: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
8f30: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
8f40: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8f50: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8f80: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
8f90: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
8fa0: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
8fb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8fc0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
8fd0: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
8fe0: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
8ff0: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
9000: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
9010: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9020: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
9030: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
9040: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9050: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
9060: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
9070: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
9080: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
9090: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
90a0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
90b0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
90c0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
90d0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
90e0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
90f0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9100: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
9110: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
9120: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
9130: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
9140: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
9150: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
9160: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
9170: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
9180: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
9190: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
91a0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
91b0: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
91c0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
91d0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
91e0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
91f0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
9200: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
9210: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
9220: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
9230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
9240: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
9250: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
9260: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
9270: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
9280: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
9290: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
92a0: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
92b0: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
92c0: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
92d0: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
92e0: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
92f0: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
9300: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
9310: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
9320: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
9330: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9340: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
9350: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
9360: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
9370: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
9380: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9390: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
93c0: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
93d0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
93e0: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9400: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
9410: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
9420: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
9430: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
9440: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
9450: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
9460: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
9470: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
9480: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
9490: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
94a0: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
94b0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
94c0: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
94d0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
94e0: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
94f0: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
9500: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
9510: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
9520: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
9530: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
9540: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
9550: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
9560: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
9570: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
9580: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
9590: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
95a0: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
95b0: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
95c0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
95d0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
95e0: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
95f0: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
9600: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
9610: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
9620: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
9630: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9650: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
9660: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
9670: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
9680: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
9690: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
96a0: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
96b0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
96c0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
96d0: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
96e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
96f0: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
9700: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
9710: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
9720: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
9730: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
9740: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
9750: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
9760: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
9770: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
9780: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
9790: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
97a0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
97b0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
97c0: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
97d0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
97e0: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
97f0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
9800: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
9810: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
9820: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
9830: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
9840: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
9850: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
9860: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
9870: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9880: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
9890: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
98a0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
98b0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
98c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
98d0: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
98e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
98f0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
9900: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
9910: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
9920: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
9930: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
9940: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
9950: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
9960: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
9970: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
9980: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
9990: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
99b0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
99c0: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
99d0: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
99e0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
99f0: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
9a00: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
9a10: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
9a20: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
9a30: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
9a40: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
9a50: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
9a60: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
9a70: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
9a80: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
9a90: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
9aa0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
9ab0: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
9ac0: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
9ad0: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
9ae0: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
9af0: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
9b00: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
9b10: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
9b20: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
9b30: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
9b40: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
9b50: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
9b60: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
9b70: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
9b80: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
9b90: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
9ba0: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
9bb0: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
9bc0: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
9bd0: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
9be0: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
9bf0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9c00: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
9c10: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
9c20: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
9c30: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
9c40: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
9c50: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9c70: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
9c80: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
9c90: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
9ca0: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
9cb0: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
9cc0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
9cd0: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
9ce0: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
9cf0: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
9d00: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
9d10: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
9d20: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
9d30: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
9d40: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
9d50: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
9d60: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
9d70: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
9d80: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
9d90: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9da0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9db0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
9dc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
9dd0: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
9de0: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
9df0: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
9e00: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
9e10: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
9e20: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
9e30: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
9e40: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
9e50: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9e60: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
9e70: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
9e80: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
9e90: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9ea0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9eb0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9ec0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
9ed0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9ee0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9ef0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9f00: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
9f10: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
9f20: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
9f30: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
9f40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
9f50: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
9f60: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
9f70: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
9f80: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
9f90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
9fa0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
9fb0: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
9fc0: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
9fd0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
9fe0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9ff0: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
a000: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
a010: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
a020: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a050: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
a060: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
a070: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0a0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
a0b0: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
a0c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a0d0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
a0e0: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
a0f0: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
a100: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
a110: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
a140: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
a150: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
a160: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
a170: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
a180: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
a190: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
a1a0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
a1b0: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
a1c0: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
a1d0: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
a1e0: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
a1f0: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
a200: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
a210: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
a220: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
a230: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
a240: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a250: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
a260: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
a270: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
a280: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
a290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a2a0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
a2b0: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
a2c0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
a2d0: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
a2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a2f0: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
a300: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
a310: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
a320: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
a330: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
a340: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
a350: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
a360: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
a370: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
a380: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
a390: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
a3a0: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
a3b0: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
a3c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
a3d0: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
a3e0: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
a3f0: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
a400: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
a410: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
a420: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
a430: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
a440: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
a450: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a460: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
a470: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
a480: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
a490: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
a4a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a4b0: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
a4c0: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
a4d0: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
a4e0: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
a4f0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
a500: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
a510: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
a520: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
a530: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
a540: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
a550: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
a560: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
a570: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
a580: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
a590: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
a5a0: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
a5b0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
a5c0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
a5d0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
a5e0: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
a5f0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
a600: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
a610: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
a620: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
a630: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
a640: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
a650: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
a660: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
a670: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
a680: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
a690: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
a6a0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
a6b0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
a6c0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
a6d0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
a6e0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
a6f0: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
a700: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
a710: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
a720: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
a730: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
a740: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
a750: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
a760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
a770: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
a780: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
a790: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
a7a0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
a7b0: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
a7c0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
a7d0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
a7e0: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
a7f0: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
a800: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
a810: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
a820: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
a830: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
a840: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
a850: 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20  ctoring */./*   
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74               not
a870: 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20   used    0x0010 
a880: 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45    // Was: SQLITE
a890: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f  _IdxRealAsInt */
a8a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a8b0: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
a8c0: 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49  x0020   /* DISTI
a8d0: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
a8e0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
a8f0: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
a900: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43     0x0040   /* C
a910: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
a920: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
a930: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
a940: 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a  Join 0x0080   /*
a950: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
a960: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
a970: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
a980: 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78  ubqCoroutine  0x
a990: 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61  0100   /* Evalua
a9a0: 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73  te subqueries as
a9b0: 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23   coroutines */.#
a9c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
a9d0: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
a9e0: 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  200   /* Transit
a9f0: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
aa00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
aa10: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
aa20: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0400   /* Omi
aa30: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
aa40: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
aa50: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
aa60: 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30            0x0800
aa70: 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 53 51     /* Use the SQ
aa80: 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62 6c 65  LITE_STAT3 table
aa90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aaa0: 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73 74 20  TE_AdjustOutEst 
aab0: 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 41 64    0x1000   /* Ad
aac0: 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73 74 69  just output esti
aad0: 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48 45 52  mates using WHER
aae0: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
aaf0: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
ab00: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
ab10: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
ab20: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
ab30: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
ab40: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
ab50: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
ab60: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
ab70: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
ab80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
ab90: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
aba0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
abb0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
abc0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
abd0: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
abe0: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
abf0: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
ac00: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
ac10: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
ac20: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
ac30: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
ac40: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
ac50: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
ac60: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
ac70: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
ac80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
ac90: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
aca0: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
acb0: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
acc0: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
acd0: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
ace0: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
acf0: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
ad00: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
ad10: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
ad20: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
ad30: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
ad40: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
ad50: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
ad60: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
ad70: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
ad80: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
ad90: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
ada0: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
adb0: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
adc0: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
add0: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
ade0: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
adf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ae00: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
ae10: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
ae20: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
ae30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae40: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
ae50: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
ae60: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
ae70: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
ae80: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
ae90: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
aea0: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
aeb0: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
aec0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
aed0: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
aee0: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
aef0: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
af00: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
af10: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
af20: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
af30: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
af40: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
af50: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
af60: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
af70: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
af80: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
af90: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
afa0: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
afb0: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
afc0: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
afd0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
afe0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
aff0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
b000: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
b010: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
b020: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
b030: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
b040: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
b050: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
b060: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
b070: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
b080: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
b090: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
b0a0: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
b0b0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
b0c0: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
b0d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b0e0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
b0f0: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
b100: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
b110: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
b120: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
b130: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
b140: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
b150: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
b160: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
b170: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
b180: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
b190: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
b1a0: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
b1b0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
b1c0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
b1d0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
b1e0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
b1f0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
b200: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
b210: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
b220: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
b230: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
b240: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
b250: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
b260: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
b270: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
b280: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
b290: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
b2a0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b2b0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
b2c0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
b2d0: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
b2e0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
b2f0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
b300: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
b310: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
b320: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
b330: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
b340: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
b350: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
b360: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
b370: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
b380: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
b390: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
b3a0: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
b3b0: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
b3c0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
b3d0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
b3e0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
b3f0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
b400: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
b410: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
b420: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
b430: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
b440: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
b450: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
b460: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
b470: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
b480: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
b490: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
b4a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
b4b0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
b4c0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
b4d0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
b4e0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
b4f0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
b500: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
b510: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
b520: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
b530: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
b540: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
b550: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
b560: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
b570: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
b580: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
b590: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
b5a0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
b5b0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
b5c0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
b5d0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
b5e0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
b5f0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
b600: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
b610: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
b620: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
b630: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
b640: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
b650: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
b660: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
b670: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
b680: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
b690: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
b6a0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
b6b0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
b6c0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
b6d0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
b6e0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
b6f0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
b700: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
b710: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
b720: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
b730: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
b740: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
b750: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
b760: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
b770: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
b780: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
b790: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
b7a0: 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20  CMASK  0x003 /* 
b7b0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
b7c0: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
b7d0: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
b7e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
b7f0: 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20  KE     0x004 /* 
b800: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
b810: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
b820: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b830: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
b840: 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73      0x008 /* Cas
b850: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
b860: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
b870: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b880: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
b890: 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  x010 /* Ephemera
b8a0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
b8b0: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
b8c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
b8d0: 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71  COLL 0x020 /* sq
b8e0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
b8f0: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
b900: 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  alled */.#define
b910: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
b920: 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42  GTH   0x040 /* B
b930: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
b940: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
b950: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b960: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30 20  _TYPEOF   0x080 
b970: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
b980: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
b990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9a0: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
b9b0: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
b9c0: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
b9d0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
b9e0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
b9f0: 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c  CE 0x200 /* Buil
ba00: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
ba10: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
ba20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ba30: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30  NC_UNLIKELY 0x40
ba40: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
ba50: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
ba60: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ba70: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ba80: 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74  T 0x800 /* Const
ba90: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
baa0: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
bab0: 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  t */../*.** The 
bac0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
bad0: 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
bae0: 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
baf0: 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
bb00: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
bb10: 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
bb20: 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
bb30: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
bb40: 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
bb50: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
bb60: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
bb70: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
bb80: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
bb90: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
bba0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
bbb0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
bbc0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
bbd0: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
bbe0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
bbf0: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
bc00: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
bc10: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
bc20: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
bc30: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
bc40: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
bc50: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
bc60: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
bc70: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
bc80: 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20  tion. If .**    
bc90: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
bca0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
bcb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
bcc0: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
bcd0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
bce0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
bcf0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
bd00: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
bd10: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
bd20: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
bd30: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
bd40: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   flag..**.**   A
bd50: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
bd60: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
bd70: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
bd80: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
bd90: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
bda0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
bdb0: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
bdc0: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
bdd0: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
bde0: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
bdf0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
be00: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
be10: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
be20: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
be30: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
be40: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
be50: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
be60: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
be70: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
be80: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
be90: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
bea0: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
beb0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
bec0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
bed0: 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  e .**     that a
bee0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
bef0: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
bf00: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
bf10: 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20  ll to C .**     
bf20: 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
bf30: 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
bf40: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
bf50: 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
bf60: 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
bf70: 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
bf80: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
bf90: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
bfa0: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
bfb0: 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
bfc0: 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
bfd0: 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
bfe0: 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
bff0: 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
c000: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
c010: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c020: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c030: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
c040: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
c050: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
c060: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
c070: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
c080: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
c090: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
c0a0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c0b0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  , 0}.#define VFU
c0c0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c0d0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c0e0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
c0f0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
c100: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
c110: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
c120: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
c130: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
c140: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c150: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  , 0}.#define FUN
c160: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
c170: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c180: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
c190: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
c1a0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
c1b0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
c1c0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
c1d0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
c1e0: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
c1f0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
c200: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
c210: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
c220: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
c230: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
c240: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
c250: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
c260: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c270: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
c280: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
c290: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
c2a0: 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
c2b0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
c2c0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45   0}.#define LIKE
c2d0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c2e0: 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
c2f0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
c300: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
c310: 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
c320: 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72   \.   (void *)ar
c330: 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20  g, 0, likeFunc, 
c340: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
c350: 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52   0}.#define AGGR
c360: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
c370: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
c380: 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b  p, xFinal) \.  {
c390: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
c3a0: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
c3b0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c3c0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c3d0: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
c3e0: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
c3f0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
c400: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
c410: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
c420: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
c430: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
c440: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
c450: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
c460: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
c470: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
c480: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
c490: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
c4a0: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
c4b0: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
c4c0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
c4d0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
c4e0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
c4f0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
c500: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
c530: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
c540: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
c550: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
c580: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
c590: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
c5a0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c5c0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
c5d0: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
c5e0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
c5f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c600: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
c610: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
c620: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
c630: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
c640: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
c650: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
c660: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
c670: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
c680: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
c690: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
c6a0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
c6b0: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
c6c0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
c6d0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
c6e0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
c6f0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
c700: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
c710: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
c720: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
c730: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
c740: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
c750: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
c760: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
c770: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
c780: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
c790: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
c7a0: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
c7b0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
c7c0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
c7d0: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
c7e0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
c7f0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
c800: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
c810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c820: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
c830: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
c840: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
c850: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
c880: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
c890: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
c8a0: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c8c0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
c8d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
c8e0: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
c8f0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
c900: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
c910: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
c920: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
c930: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
c940: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
c950: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
c960: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
c970: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
c980: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
c990: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c9a0: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
c9b0: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
c9c0: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
c9d0: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
c9e0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
c9f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
ca00: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
ca10: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
ca20: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
ca30: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
ca40: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
ca50: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
ca60: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
ca70: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
ca80: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
ca90: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
caa0: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
cab0: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
cac0: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
cad0: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
cae0: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
caf0: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
cb00: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
cb10: 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  size of this col
cb20: 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a  umn.  INT==1 */.
cb30: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
cb40: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
cb50: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
cb60: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
cb70: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
cb80: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
cb90: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
cba0: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
cbb0: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
cbc0: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
cbd0: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
cbe0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
cbf0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
cc00: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
cc10: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
cc20: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
cc30: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
cc40: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
cc50: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
cc60: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
cc70: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
cc80: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
cc90: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
cca0: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
ccb0: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
ccc0: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
ccd0: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
cce0: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
ccf0: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
cd00: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
cd10: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
cd20: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
cd30: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
cd40: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
cd50: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
cd60: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
cd70: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
cd80: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
cd90: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
cda0: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
cdb0: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
cdc0: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
cdd0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
cde0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
cdf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ce00: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
ce10: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce30: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
ce40: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
ce50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
ce60: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
ce70: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
ce80: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
ce90: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
cea0: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
ceb0: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
cec0: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
ced0: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
cee0: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
cef0: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
cf00: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
cf10: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
cf20: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
cf30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
cf40: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
cf50: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
cf60: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
cf70: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
cf80: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
cf90: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
cfa0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
cfb0: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
cfc0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
cfd0: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
cfe0: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
cff0: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
d000: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
d010: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
d020: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
d030: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
d040: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
d050: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
d060: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
d070: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
d080: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
d090: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
d0a0: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
d0b0: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
d0c0: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 61 27  e begin with 'a'
d0d0: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
d0e0: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
d0f0: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
d100: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
d110: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
d120: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
d130: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
d140: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
d150: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
d160: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
d170: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
d180: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
d190: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
d1a0: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
d1b0: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
d1c0: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
d1d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
d1e0: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
d1f0: 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'a'.#define SQLI
d200: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20  TE_AFF_NONE     
d210: 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'b'.#define SQLI
d220: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
d230: 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'c'.#define SQLI
d240: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
d250: 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'd'.#define SQLI
d260: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
d270: 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'e'..#define sql
d280: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
d290: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
d2a0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d2b0: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
d2c0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
d2d0: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
d2e0: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
d2f0: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
d300: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a  finity value. .*
d310: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d320: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
d330: 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  67../*.** Additi
d340: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
d350: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
d360: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
d370: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
d380: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
d390: 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
d3a0: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
d3b0: 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
d3c0: 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
d3d0: 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
d3e0: 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
d3f0: 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
d400: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d410: 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
d420: 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
d430: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
d440: 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
d450: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
d460: 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
d470: 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
d480: 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
d490: 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
d4a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d4b0: 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d  L   0x08  /* jum
d4c0: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
d4d0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
d4e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d4f0: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 31 30  TOREP2      0x10
d500: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
d510: 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
d520: 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
d530: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d540: 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
d550: 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
d560: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d570: 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
d580: 78 38 38 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x88  /* Assert t
d590: 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
d5a0: 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
d5b0: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
d5c0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
d5d0: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
d5e0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
d5f0: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
d600: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
d610: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
d620: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
d630: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
d640: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
d650: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
d660: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
d670: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
d680: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
d690: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
d6a0: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
d6b0: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
d6c0: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
d6d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
d6e0: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
d6f0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
d700: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
d710: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
d720: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
d730: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
d740: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
d750: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
d760: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
d770: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
d780: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
d790: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
d7a0: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
d7b0: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
d7c0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
d7d0: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
d7e0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
d7f0: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
d800: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
d810: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
d820: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
d830: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
d840: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
d850: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
d860: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
d870: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
d880: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
d890: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
d8a0: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
d8b0: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
d8c0: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
d8d0: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
d8e0: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
d8f0: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
d900: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
d910: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
d920: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
d930: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
d940: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
d950: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
d960: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
d970: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
d980: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
d990: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
d9a0: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
d9b0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
d9c0: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
d9d0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
d9e0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
d9f0: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
da00: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
da10: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
da20: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
da30: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
da40: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
da50: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
da60: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
da70: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
da80: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
da90: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
daa0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
dab0: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
dac0: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
dad0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
dae0: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
daf0: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
db00: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
db10: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
db20: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
db30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
db40: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
db50: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
db60: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
db70: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
db80: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
db90: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
dba0: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
dbb0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
dbc0: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
dbd0: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
dbe0: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
dbf0: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
dc00: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
dc10: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
dc20: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
dc30: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
dc40: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
dc50: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
dc60: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
dc70: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
dc80: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
dc90: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
dca0: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
dcb0: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
dcc0: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
dcd0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
dce0: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
dcf0: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
dd00: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
dd10: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
dd20: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
dd30: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
dd40: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
dd50: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
dd60: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
dd70: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
dd80: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
dd90: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
dda0: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
ddb0: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
ddc0: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
ddd0: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
dde0: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
ddf0: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
de00: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
de10: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
de20: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
de30: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
de40: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
de50: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
de60: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
de70: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
de80: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
de90: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
dea0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
deb0: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
dec0: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
ded0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
dee0: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
def0: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
df00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
df10: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
df20: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
df30: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
df40: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
df50: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
df60: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
df70: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
df80: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
df90: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
dfa0: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
dfb0: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
dfc0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
dfd0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
dfe0: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
dff0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
e000: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
e010: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
e020: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e040: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
e050: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
e060: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
e070: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
e080: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
e090: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
e0a0: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
e0b0: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
e0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
e0d0: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
e0e0: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
e0f0: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
e100: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
e110: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
e120: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
e130: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
e140: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
e150: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
e160: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
e170: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
e180: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
e190: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
e1a0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
e1b0: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
e1c0: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
e1d0: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
e1e0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
e1f0: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
e200: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
e210: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
e220: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
e230: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
e240: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
e250: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
e260: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
e270: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
e280: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
e290: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
e2a0: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
e2b0: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
e2c0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
e2d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
e2e0: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
e2f0: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
e300: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
e310: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
e320: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
e330: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
e340: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
e350: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
e360: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
e370: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
e380: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
e390: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
e3a0: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
e3b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
e3c0: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
e3d0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
e3e0: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
e3f0: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
e400: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
e410: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
e420: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
e430: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
e440: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
e450: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
e460: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
e470: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
e480: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
e490: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
e4a0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
e4b0: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
e4c0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
e4d0: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
e4e0: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
e4f0: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
e500: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
e510: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
e520: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
e530: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
e540: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
e550: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
e560: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
e570: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
e580: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
e590: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
e5a0: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
e5b0: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
e5c0: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
e5d0: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
e5e0: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
e5f0: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
e600: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
e610: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
e620: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
e630: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
e640: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
e650: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
e660: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
e670: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
e680: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
e690: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
e6a0: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
e6b0: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
e6c0: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
e6d0: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
e6e0: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
e6f0: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
e700: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
e710: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
e720: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
e730: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
e740: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
e750: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
e760: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
e770: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
e780: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
e790: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
e7a0: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
e7b0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
e7c0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
e7d0: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
e7e0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
e7f0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
e800: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
e810: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
e820: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
e830: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
e840: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
e850: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
e860: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
e870: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
e880: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
e890: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
e8a0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
e8b0: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
e8c0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
e8d0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
e8e0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
e8f0: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
e900: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
e910: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
e920: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
e930: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
e940: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67   */.#endif.  Log
e950: 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
e960: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
e970: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
e980: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
e990: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
e9a0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
e9b0: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
e9c0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
e9d0: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
e9e0: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
e9f0: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
ea00: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
ea10: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
ea20: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
ea30: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
ea40: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
ea50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
ea60: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
ea70: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ea90: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
eaa0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
eab0: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
eac0: 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
ead0: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
eae0: 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
eaf0: 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66   bytes */.#ifdef
eb00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
eb10: 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74  OSTMULT.  LogEst
eb20: 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f   costMult;     /
eb30: 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65  * Cost multiplie
eb40: 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73  r for using this
eb50: 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
eb60: 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
eb70: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
eb80: 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
eb90: 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
eba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
ebb0: 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
ebc0: 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
ebd0: 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
ebe0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
ebf0: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
ec00: 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
ec10: 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
ec20: 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
ec30: 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
ec40: 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
ec50: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
ec60: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
ec70: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
ec80: 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
ec90: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
eca0: 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
ecb0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
ecc0: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54  ModuleArg;  /* T
ecd0: 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c  ext of all modul
ece0: 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d  e args. [0] is m
ecf0: 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  odule name */.  
ed00: 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
ed10: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
ed20: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
ed30: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
ed40: 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
ed50: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
ed60: 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
ed70: 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
ed80: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
ed90: 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
eda0: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
edb0: 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
edc0: 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
edd0: 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
ede0: 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
edf0: 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
ee00: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
ee10: 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
ee20: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  s..*/.#define TF
ee30: 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
ee40: 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
ee50: 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
ee60: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
ee70: 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
ee80: 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
ee90: 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
eea0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
eeb0: 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
eec0: 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
eed0: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
eee0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
eef0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
ef00: 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
ef10: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
ef20: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
ef30: 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
ef40: 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
ef50: 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
ef60: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
ef70: 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
ef80: 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20  owid    0x20    
ef90: 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64  /* No rowid used
efa0: 2e 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  . PRIMARY KEY is
efb0: 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a   the key */.../*
efc0: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
efd0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
efe0: 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
eff0: 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
f000: 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
f010: 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
f020: 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
f030: 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
f040: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
f050: 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
f060: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
f070: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
f080: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
f090: 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
f0a0: 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
f0b0: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
f0c0: 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
f0d0: 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
f0e0: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
f0f0: 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
f100: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
f110: 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
f120: 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
f130: 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69  )      0.#  defi
f140: 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
f150: 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  n(X) 0.#endif../
f160: 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
f170: 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
f180: 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
f190: 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
f1a0: 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
f1b0: 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
f1c0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
f1d0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
f1e0: 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
f1f0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
f200: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
f210: 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
f220: 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
f230: 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
f240: 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
f250: 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
f260: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
f270: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
f280: 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
f290: 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
f2a0: 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
f2b0: 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
f2c0: 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
f2d0: 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
f2e0: 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
f2f0: 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
f300: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
f310: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
f320: 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
f330: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
f340: 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
f350: 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
f360: 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
f370: 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
f380: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
f390: 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
f3a0: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
f3b0: 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
f3c0: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
f3d0: 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
f3e0: 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
f3f0: 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
f400: 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
f410: 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
f420: 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
f430: 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
f440: 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
f450: 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
f460: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f470: 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
f480: 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
f490: 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
f4a0: 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
f4b0: 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
f4c0: 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
f4d0: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
f4e0: 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
f4f0: 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
f500: 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
f510: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
f520: 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
f530: 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
f540: 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
f550: 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
f560: 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
f570: 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
f580: 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
f590: 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
f5a0: 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
f5b0: 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
f5c0: 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
f5d0: 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
f5e0: 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
f5f0: 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
f600: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
f610: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
f620: 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
f630: 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
f640: 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
f650: 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
f660: 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
f670: 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
f680: 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
f690: 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
f6a0: 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
f6b0: 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
f6c0: 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
f6d0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
f6e0: 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
f6f0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
f700: 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
f710: 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
f720: 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
f730: 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
f740: 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
f750: 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
f760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
f770: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
f780: 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
f790: 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
f7a0: 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
f7b0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
f7c0: 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
f7d0: 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
f7e0: 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
f7f0: 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
f800: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
f810: 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
f820: 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
f830: 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
f840: 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
f850: 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
f860: 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
f870: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
f880: 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
f890: 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
f8a0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
f8b0: 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
f8c0: 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
f8d0: 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
f8e0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
f8f0: 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
f900: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
f910: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
f920: 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
f930: 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
f940: 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
f950: 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
f960: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
f970: 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
f980: 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
f990: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
f9a0: 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
f9b0: 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
f9c0: 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
f9d0: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
f9e0: 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
f9f0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
fa00: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
fa10: 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
fa20: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
fa30: 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
fa40: 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
fa50: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
fa60: 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
fa70: 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
fa80: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
fa90: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
faa0: 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
fab0: 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
fac0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
fad0: 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
fae0: 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
faf0: 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
fb00: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
fb10: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
fb20: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
fb30: 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
fb40: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
fb50: 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
fb60: 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
fb70: 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
fb80: 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
fb90: 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
fba0: 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
fbb0: 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
fbc0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
fbd0: 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
fbe0: 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
fbf0: 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
fc00: 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
fc10: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
fc20: 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
fc30: 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
fc40: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
fc50: 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
fc60: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
fc70: 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
fc80: 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
fc90: 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
fca0: 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
fcb0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
fcc0: 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
fcd0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
fce0: 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
fcf0: 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
fd00: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
fd10: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
fd20: 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
fd30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
fd40: 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
fd50: 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
fd60: 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
fd70: 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
fd80: 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
fd90: 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
fda0: 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
fdb0: 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
fdc0: 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
fdd0: 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
fde0: 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
fdf0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
fe00: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
fe10: 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
fe20: 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
fe30: 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
fe40: 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
fe50: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
fe60: 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
fe70: 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
fe80: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
fe90: 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
fea0: 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
feb0: 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
fec0: 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
fed0: 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
fee0: 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
fef0: 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
ff00: 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
ff10: 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
ff20: 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
ff30: 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
ff40: 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
ff50: 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
ff60: 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
ff70: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
ff80: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
ff90: 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
ffa0: 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
ffb0: 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
ffc0: 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
ffd0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
ffe0: 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
fff0: 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
10000 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
10010 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
10020 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
10030 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
10040 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
10050 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
10060 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
10070 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
10080 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
10090 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
100a0 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
100b0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
100c0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
100d0 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
100e0 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
100f0 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
10100 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
10110 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
10120 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
10130 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
10140 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
10150 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
10160 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
10170 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
10180 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
10190 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
101a0 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
101b0 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
101c0 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
101d0 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
101e0 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
101f0 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
10200 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
10210 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
10220 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10230 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
10240 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
10250 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
10260 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
10270 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
10280 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
10290 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
102a0 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
102b0 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
102c0 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
102d0 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
102e0 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
102f0 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
10300 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
10310 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
10320 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
10330 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
10340 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
10350 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
10360 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
10370 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
10380 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10390 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
103a0 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
103b0 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
103c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
103d0 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
103e0 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
103f0 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
10400 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
10410 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10420 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
10430 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
10440 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20  .  u16 nXField; 
10450 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10460 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f   of columns beyo
10470 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d  nd the key colum
10480 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ns */.  sqlite3 
10490 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
104a0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
104b0 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
104c0 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
104d0 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
104e0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
104f0 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
10500 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
10510 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
10520 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
10530 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
10540 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
10550 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
10560 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
10570 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
10580 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69  ut a.** single i
10590 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74  ndex record that
105a0 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
105b0 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
105c0 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
105d0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  values..**.** A 
105e0 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
105f0 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
10600 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
10610 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
10620 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
10630 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
10640 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
10650 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
10660 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
10670 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
10680 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
10690 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
106a0 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
106b0 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
106c0 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
106d0 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
106e0 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
106f0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
10700 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
10710 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  re holds a recor
10720 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
10730 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d  dy been disassem
10740 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73  bled.** into its
10750 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65   constituent fie
10760 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  lds..**.** The r
10770 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20  1 and r2 member 
10780 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
10790 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20 6f  ly used by the o
107a0 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69  ptimized compari
107b0 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  son.** functions
107c0 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
107d0 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65  reInt() and vdbe
107e0 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72  RecordCompareStr
107f0 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74  ing()..*/.struct
10800 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
10810 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
10820 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
10830 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
10840 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
10850 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
10860 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10870 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
10880 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
10890 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
108a0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
108b0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
108c0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
108d0 20 69 73 43 6f 72 72 75 70 74 3b 20 20 20 20 20   isCorrupt;     
108e0 20 20 2f 2a 20 43 6f 72 72 75 70 74 69 6f 6e 20    /* Corruption 
108f0 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63  detected by xRec
10900 6f 72 64 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a  ordCompare() */.
10910 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
10920 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
10930 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20  */.  int r1;    
10940 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
10950 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
10960 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20  lhs > rhs) */.  
10970 69 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20 20  int r2;         
10980 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
10990 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c  return if (rhs <
109a0 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   lhs) */.};.../*
109b0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
109c0 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
109d0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
109e0 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
109f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10a00 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
10a10 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
10a20 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
10a30 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
10a40 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
10a50 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
10a60 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
10a70 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
10a80 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
10a90 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
10aa0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
10ab0 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
10ac0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
10ad0 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
10ae0 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
10af0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
10b00 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
10b10 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
10b20 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
10b30 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
10b40 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
10b50 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
10b60 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
10b70 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
10b80 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
10b90 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
10ba0 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
10bb0 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
10bc0 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
10bd0 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
10be0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
10bf0 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
10c00 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
10c10 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
10c20 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d   .** first colum
10c30 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
10c40 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
10c50 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
10c60 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
10c70 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
10c80 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
10c90 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
10ca0 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
10cb0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
10cc0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
10cd0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
10ce0 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
10cf0 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
10d00 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
10d10 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
10d20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
10d30 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
10d40 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
10d50 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
10d60 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
10d70 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
10d80 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
10d90 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
10da0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
10db0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
10dc0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
10dd0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
10de0 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
10df0 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f  olution .** algo
10e00 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
10e10 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
10e20 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
10e30 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
10e40 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
10e50 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b  /.struct Index {
10e60 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
10e70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10e80 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65  ame of this inde
10e90 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f  x */.  i16 *aiCo
10ea0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10eb0 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
10ec0 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
10ed0 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
10ee0 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a   0 */.  LogEst *
10ef0 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20  aiRowLogEst;    
10f00 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45   /* From ANALYZE
10f10 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65  : Est. rows sele
10f20 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c  cted by each col
10f30 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  umn */.  Table *
10f40 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  pTable;         
10f50 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
10f60 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
10f70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
10f80 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Aff;           /
10f90 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
10fa0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
10fb0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
10fc0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10fe0 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
10ff0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
11000 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
11010 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
11020 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  a;         /* Sc
11030 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
11040 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
11050 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
11060 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20           /* for 
11070 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75  each column: Tru
11080 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d  e==DESC, False==
11090 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ASC */.  char **
110a0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  azColl;         
110b0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
110c0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
110d0 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
110e0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72   */.  Expr *pPar
110f0 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f  tIdxWhere;     /
11100 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
11110 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63  or partial indic
11120 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20  es */.  KeyInfo 
11130 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20 20  *pKeyInfo;      
11140 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62   /* A KeyInfo ob
11150 6a 65 63 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ject suitable fo
11160 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
11170 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
11180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
11190 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
111a0 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
111b0 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
111c0 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
111d0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
111e0 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
111f0 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
11200 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
11210 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11220 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
11230 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
11240 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
11250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11260 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
11270 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
11280 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
11290 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
112a0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
112b0 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
112c0 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
112d0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
112e0 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
112f0 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
11300 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
11310 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
11320 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
11330 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
11340 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
11350 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
11360 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
11370 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
11380 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
11390 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
113a0 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
113b0 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ns */.  unsigned
113c0 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20   isResized:1;   
113d0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69   /* True if resi
113e0 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20  zeIndexObject() 
113f0 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
11400 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
11410 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a  Covering:1;   /*
11420 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73   True if this is
11430 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65   a covering inde
11440 78 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  x */.#ifdef SQLI
11450 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
11460 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
11470 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
11480 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11490 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
114a0 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
114b0 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
114c0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
114d0 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
114e0 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
114f0 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
11500 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
11510 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
11520 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
11530 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
11540 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
11550 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
11560 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
11570 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66  st key */.#endif
11580 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
11590 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
115a0 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
115b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
115c0 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
115d0 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
115e0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
115f0 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
11600 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
11610 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
11620 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
11630 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
11640 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11650 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
11660 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
11670 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
11680 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
11690 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
116a0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
116b0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
116c0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
116d0 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
116e0 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
116f0 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
11700 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
11710 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
11720 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
11730 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
11740 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
11750 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
11760 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
11770 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  ne)../*.** Each 
11780 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
11790 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
117a0 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
117b0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
117c0 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72   .** using a str
117d0 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
117e0 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
117f0 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
11800 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
11810 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
11820 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
11830 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
11840 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
11850 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
11860 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
11870 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
11880 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
11890 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
118a0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
118b0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
118c0 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
118d0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
118e0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
118f0 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
11900 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
11910 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
11920 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
11930 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
11940 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
11950 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
11960 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
11970 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
11980 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
11990 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
119a0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
119b0 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
119c0 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
119d0 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
119e0 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
119f0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
11a00 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
11a10 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
11a20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
11a30 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
11a40 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
11a50 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
11a60 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
11a70 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
11a80 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
11a90 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
11aa0 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
11ab0 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
11ac0 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
11ad0 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
11ae0 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
11af0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
11b00 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
11b10 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
11b20 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
11b30 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
11b40 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
11b50 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
11b60 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
11b70 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
11b80 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
11b90 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
11ba0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
11bb0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
11bc0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
11bd0 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
11be0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
11bf0 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
11c00 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
11c10 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
11c20 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
11c30 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
11c40 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
11c50 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
11c60 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
11c70 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
11c80 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
11c90 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
11ca0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
11cb0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
11cc0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
11cd0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
11ce0 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
11cf0 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
11d00 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
11d10 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
11d20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
11d30 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
11d40 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
11d50 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
11d60 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
11d70 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
11d80 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
11d90 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
11da0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
11db0 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
11dc0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
11dd0 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
11de0 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
11df0 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
11e00 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
11e10 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
11e20 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
11e50 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
11e60 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
11e70 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
11e80 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
11e90 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
11ea0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
11eb0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
11ec0 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
11ef0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
11f00 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
11f10 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
11f20 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
11f30 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
11f40 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
11f50 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
11f60 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
11f70 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
11f80 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
11f90 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
11fa0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
11fb0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
11fc0 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
11fd0 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
11fe0 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
11ff0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
12000 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
12010 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
12020 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
12030 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
12040 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
12050 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
12060 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
12070 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
12080 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
12090 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
120a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
120b0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
120c0 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
120d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
120e0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
120f0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
12100 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
12110 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
12120 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
12130 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
12140 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
12150 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
12160 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
12170 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
12180 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
12190 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
121c0 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
121d0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
121e0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
121f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
12200 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
12210 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
12220 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
12230 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
12240 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
12250 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
12260 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
12270 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
12280 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
12290 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
122a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
122b0 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
122e0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
122f0 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
12300 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12320 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
12330 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
12340 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
12350 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
12360 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12370 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
12380 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
12390 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
123a0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
123b0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
123c0 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
123d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
123e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
123f0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
12400 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12420 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
12430 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
12440 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
12450 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
12460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
12470 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
12480 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
12490 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
124a0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
124b0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
124c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
124d0 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
124e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
124f0 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
12500 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
12510 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
12520 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
12530 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
12540 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
12550 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
12560 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
12570 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
12580 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
12590 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
125a0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
125b0 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
125c0 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
125d0 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
125e0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
125f0 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
12600 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
12610 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
12620 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
12630 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
12640 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
12650 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
12660 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
12670 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
12680 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
12690 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
126a0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
126b0 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
126c0 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
126d0 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
126e0 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
126f0 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
12700 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
12710 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
12720 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
12730 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
12740 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
12750 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
12760 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
12770 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
12780 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
12790 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
127a0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
127b0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
127c0 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
127d0 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
127e0 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
127f0 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
12800 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
12810 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
12820 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
12830 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
12840 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
12850 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
12860 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
12870 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
12880 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
12890 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
128a0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
128b0 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
128c0 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
128d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
128e0 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
128f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
12900 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
12910 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
12920 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
12930 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
12940 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
12950 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
12960 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
12970 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
12980 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
12990 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
129a0 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
129b0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
129c0 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
129d0 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
129e0 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
129f0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
12a00 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
12a10 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
12a20 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
12a30 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
12a40 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
12a50 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
12a60 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
12a70 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
12a80 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
12a90 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
12aa0 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
12ab0 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
12ac0 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
12ad0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
12ae0 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
12af0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
12b00 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
12b10 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
12b20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
12b30 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
12b40 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
12b50 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
12b60 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
12b70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
12b80 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
12b90 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
12ba0 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
12bb0 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
12bc0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
12bd0 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
12be0 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
12bf0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
12c00 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
12c10 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
12c20 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
12c30 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
12c40 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
12c50 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
12c60 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
12c70 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
12c80 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
12c90 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
12ca0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
12cb0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
12cc0 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
12cd0 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
12ce0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
12cf0 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
12d00 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
12d10 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
12d20 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
12d30 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
12d40 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
12d50 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
12d60 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
12d70 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
12d80 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
12d90 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
12da0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
12db0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
12dc0 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
12dd0 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
12de0 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
12df0 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
12e00 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
12e10 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
12e20 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
12e30 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
12e40 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
12e50 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
12e60 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
12e70 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
12e80 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
12e90 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
12ea0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
12eb0 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
12ec0 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
12ed0 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
12ee0 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
12ef0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
12f00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12f10 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
12f20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
12f30 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
12f40 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
12f50 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
12f60 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
12f70 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
12f80 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
12f90 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
12fa0 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
12fb0 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
12fc0 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
12fd0 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
12fe0 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
12ff0 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
13000 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
13010 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
13020 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
13030 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
13040 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
13050 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
13060 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
13070 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
13080 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
13090 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
130a0 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
130b0 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
130c0 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
130d0 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
130e0 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
130f0 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
13100 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
13110 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
13120 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
13130 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
13140 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
13150 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
13160 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
13170 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
13180 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
13190 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
131a0 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
131b0 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
131c0 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
131d0 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
131e0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
131f0 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
13200 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
13210 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
13220 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
13230 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
13240 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
13250 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
13260 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
13270 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
13280 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
13290 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
132a0 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
132b0 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
132c0 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
132d0 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
132e0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
132f0 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
13300 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
13310 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
13320 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
13330 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
13340 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
13350 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
13360 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
13370 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
13380 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
13390 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
133a0 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
133b0 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
133c0 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
133d0 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
133e0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
133f0 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
13400 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
13410 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13430 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
13440 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
13450 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
13460 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
13470 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
13480 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
13490 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
134a0 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
134b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
134c0 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
134d0 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
134e0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
134f0 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
13500 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
13510 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
13520 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
13530 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
13540 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
13550 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
13560 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
13570 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
13580 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
13590 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
135a0 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
135b0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
135c0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
135d0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
135e0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
135f0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
13600 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
13610 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
13620 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
13630 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
13640 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
13650 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  . .  ***********
13660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
136a0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
136b0 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
136c0 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
136d0 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
136e0 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
136f0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
13700 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
13710 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
13720 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
13730 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
13740 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
13750 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
13760 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
13770 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
13780 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
13790 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
137a0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
137b0 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
137c0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
137d0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
137e0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
137f0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
13800 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
13810 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
13820 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
13830 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
13840 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
13850 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
13860 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
13870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
138a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
138b0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
138c0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
138d0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
138e0 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
138f0 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
13900 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
13910 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
13920 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
13930 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
13940 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13950 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
13960 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13980 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
13990 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
139c0 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
139d0 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
13a00 3a 20 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69  :  1000 times li
13a10 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e  kelihood */.  yn
13a20 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
13a30 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
13a40 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
13a50 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
13a80 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
13a90 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
13aa0 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36   >= 1). */.  i16
13ab0 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
13ac0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
13ad0 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
13ae0 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
13af0 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
13b00 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
13b10 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
13b20 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
13b30 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
13b40 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
13b50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
13b60 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
13b70 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
13b80 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13ba0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
13bb0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
13bc0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
13bf0 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
13c00 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
13c10 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
13c20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
13c30 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
13c40 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
13c50 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
13c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
13c70 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
13c80 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
13c90 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
13ca0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
13cb0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
13cc0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
13cd0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
13ce0 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
13cf0 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f  n  0x000001 /* O
13d00 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
13d10 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
13d20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
13d30 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
13d40 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
13d50 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
13d60 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
13d70 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
13d80 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30  e EP_Resolved  0
13d90 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68  x000004 /* IDs h
13da0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
13db0 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
13dc0 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
13dd0 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a       0x000008 /*
13de0 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
13df0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
13e00 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
13e10 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
13e20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
13e30 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
13e40 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
13e50 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
13e60 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
13e70 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
13e80 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
13e90 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
13ea0 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
13eb0 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
13ec0 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
13ed0 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
13ee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
13ef0 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
13f00 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
13f10 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
13f20 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
13f30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
13f40 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
13f50 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
13f60 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
13f70 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
13f80 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
13f90 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
13fa0 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
13fb0 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
13fc0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
13fd0 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
13fe0 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
13ff0 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
14000 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
14010 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
14020 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
14030 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
14040 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
14050 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
14060 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
14070 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
14080 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
14090 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
140a0 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
140b0 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
140c0 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
140d0 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
140e0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
140f0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
14100 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
14110 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
14120 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
14130 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
14140 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
14150 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
14160 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
14170 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
14180 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
14190 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
141a0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
141b0 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
141c0 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
141d0 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
141e0 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
141f0 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
14200 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
14210 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
14220 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
14230 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
14240 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
14250 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
14260 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38  P_Constant  0x08
14270 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20  0000 /* Node is 
14280 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f  a constant */../
14290 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
142a0 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
142b0 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
142c0 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
142d0 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
142e0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
142f0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
14300 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
14310 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
14320 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
14330 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
14340 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
14350 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
14360 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
14370 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
14380 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
14390 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
143a0 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
143b0 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
143c0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
143d0 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
143e0 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
143f0 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
14400 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
14410 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
14420 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
14430 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
14440 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
14450 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
14460 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
14470 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
14480 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
14490 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
144a0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
144b0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
144c0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
144d0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
144e0 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
144f0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
14500 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
14510 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
14520 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
14530 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
14540 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
14550 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
14560 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
14570 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
14580 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
14590 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
145a0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
145b0 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
145c0 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
145d0 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
145e0 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
145f0 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
14600 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
14610 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
14620 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
14630 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
14640 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
14650 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
14660 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
14670 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
14680 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
14690 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
146a0 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
146b0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
146c0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
146d0 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
146e0 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
146f0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
14700 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
14710 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
14720 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
14730 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
14740 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
14750 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
14760 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
14770 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
14780 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
14790 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
147a0 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
147b0 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
147c0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
147d0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
147e0 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
147f0 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
14800 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
14810 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
14820 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
14830 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
14840 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
14850 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
14860 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
14870 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
14880 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
14890 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
148a0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
148b0 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
148c0 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
148d0 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
148e0 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
148f0 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
14900 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
14910 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
14920 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
14930 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
14940 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
14950 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
14960 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
14970 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
14980 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
14990 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
149a0 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
149b0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
149c0 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
149d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
149e0 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
149f0 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
14a00 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
14a10 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
14a20 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
14a30 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
14a40 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
14a50 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
14a60 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
14a70 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
14a80 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
14a90 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
14aa0 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
14ab0 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
14ac0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
14ad0 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
14ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14af0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
14b00 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
14b10 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
14b20 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
14b30 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
14b40 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
14b50 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
14b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14b70 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
14b80 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
14b90 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
14ba0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
14bb0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
14bc0 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
14bd0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
14be0 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
14bf0 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
14c00 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
14c10 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
14c20 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
14c30 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
14c40 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
14c50 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
14c60 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
14c70 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
14c80 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
14c90 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
14ca0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
14cb0 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
14cc0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
14cd0 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
14ce0 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
14cf0 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
14d00 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
14d10 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
14d20 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
14d30 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
14d40 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
14d50 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
14d60 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
14d70 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
14d80 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
14d90 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
14da0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
14db0 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
14dc0 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
14dd0 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
14de0 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
14df0 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
14e00 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
14e10 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
14e20 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
14e30 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
14e40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
14e50 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
14e60 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
14e70 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
14e80 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
14e90 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
14ea0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
14eb0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
14ec0 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
14ed0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
14ee0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
14ef0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
14f00 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
14f10 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
14f20 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
14f30 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
14f40 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
14f50 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
14f60 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
14f70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
14f80 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
14f90 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
14fa0 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
14fb0 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
14fc0 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
14fd0 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
14fe0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
14ff0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
15000 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
15010 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
15020 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
15030 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
15040 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
15050 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
15060 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
15070 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
15080 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
15090 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
150a0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
150b0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
150c0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
150d0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
150e0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
150f0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
15100 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
15110 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
15120 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
15130 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
15140 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
15150 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
15160 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
15170 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
15180 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
15190 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
151a0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
151b0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
151c0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
151d0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
151e0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
151f0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
15200 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
15210 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
15220 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
15230 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
15240 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
15250 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
15260 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
15270 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
15280 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
15290 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
152a0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
152b0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
152c0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
152d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
152e0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
152f0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
15300 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
15310 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
15320 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
15330 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
15340 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
15350 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
15360 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
15370 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
15380 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
15390 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
153a0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
153b0 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
153c0 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
153d0 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
153e0 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
153f0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
15400 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
15410 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
15420 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
15430 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
15440 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
15450 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
15460 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
15470 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
15480 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
15490 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
154a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
154b0 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
154c0 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
154d0 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
154e0 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
154f0 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a  )1)<<(n))../*.**
15500 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
15510 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
15520 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
15530 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
15540 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
15550 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
15560 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
15570 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
15580 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
15590 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
155a0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
155b0 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
155c0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
155d0 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
155e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
155f0 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
15600 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
15610 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
15620 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
15630 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
15640 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
15650 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
15660 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
15670 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
15680 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
15690 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
156a0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
156b0 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
156c0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
156d0 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
156e0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
156f0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
15700 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
15710 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
15720 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
15730 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
15740 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
15750 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
15760 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
15770 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
15780 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
15790 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
157a0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
157b0 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
157c0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
157d0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
157e0 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
157f0 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
15800 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
15810 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
15820 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
15830 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
15840 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
15850 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
15860 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
15870 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
15880 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
15890 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
158a0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
158b0 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
158c0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
158d0 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
158e0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
158f0 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
15900 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
15910 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
15920 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
15930 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
15940 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
15950 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15960 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
15970 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
15980 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
15990 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
159a0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
159b0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
159c0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
159d0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
159e0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
159f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
15a00 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
15a10 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
15a20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15a30 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
15a40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
15a50 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
15a60 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
15a70 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
15a80 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
15a90 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
15aa0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
15ab0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
15ac0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
15ad0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
15ae0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
15af0 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
15b00 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
15b10 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
15b20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
15b30 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
15b40 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
15b50 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
15b60 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
15b70 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
15b80 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
15b90 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
15ba0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
15bb0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
15bc0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
15bd0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
15be0 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
15bf0 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
15c00 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
15c10 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
15c20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
15c30 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
15c40 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
15c50 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
15c60 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
15c70 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
15c80 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
15c90 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73  lause */.    uns
15ca0 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
15cb0 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
15cc0 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
15cd0 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
15ce0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
15cf0 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
15d00 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
15d10 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
15d20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
15d30 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
15d40 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
15d50 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
15d60 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66   WITH */.#ifndef
15d70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
15d80 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
15d90 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
15da0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
15db0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
15dc0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
15dd0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
15de0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
15df0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
15e00 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
15e10 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
15e20 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
15e30 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
15e40 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
15e50 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
15e60 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
15e70 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
15e80 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
15e90 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
15ea0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
15eb0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
15ec0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
15ed0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
15ee0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
15ef0 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
15f00 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
15f10 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
15f20 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
15f30 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
15f40 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
15f50 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
15f60 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
15f70 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
15f80 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
15f90 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
15fa0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
15fb0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
15fc0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
15fd0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
15fe0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
15ff0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
16000 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
16010 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
16020 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
16030 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16040 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
16050 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
16060 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
16070 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
16080 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
16090 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
160a0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
160b0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
160c0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
160d0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
160e0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
160f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
16100 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
16110 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
16120 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
16130 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
16140 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
16150 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
16160 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
16170 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
16180 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
16190 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
161a0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
161b0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
161c0 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
161d0 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
161e0 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
161f0 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
16200 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
16210 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
16220 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
16230 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
16240 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
16250 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
16260 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
16270 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
16280 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
16290 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
162a0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
162b0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
162c0 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
162d0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
162e0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
162f0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
16300 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
16310 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
16320 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
16330 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
16340 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
16350 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
16360 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
16370 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
16380 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
16390 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
163a0 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
163b0 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
163c0 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
163d0 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
163e0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
163f0 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
16400 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
16410 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
16420 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
16430 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
16440 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
16450 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
16460 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
16470 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
16480 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
16490 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
164a0 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
164b0 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
164c0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
164d0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
164e0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
164f0 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
16500 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
16510 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16520 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
16530 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
16540 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
16550 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
16560 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16570 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
16580 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
16590 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
165a0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
165b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
165c0 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
165d0 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
165e0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
165f0 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
16600 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
16610 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
16620 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
16630 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f  _ReopenIdx */../
16640 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
16650 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
16660 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
16670 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
16680 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
16690 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
166a0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
166b0 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
166c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
166d0 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
166e0 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
166f0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
16700 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
16710 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
16720 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
16730 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
16740 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
16750 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
16760 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
16770 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
16780 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
16790 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
167a0 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
167b0 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
167c0 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
167d0 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
167e0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
167f0 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
16800 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
16810 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
16820 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
16830 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
16840 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
16850 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
16860 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
16870 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
16880 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
16890 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
168a0 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
168b0 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
168c0 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
168d0 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
168e0 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
168f0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
16900 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
16910 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
16920 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
16930 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
16940 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
16950 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
16960 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
16970 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
16980 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74  er-most .** cont
16990 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
169a0 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
169b0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
169c0 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
169d0 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
169e0 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
169f0 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
16a00 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
16a10 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
16a20 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
16a30 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
16a40 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
16a50 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
16a60 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
16a70 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
16a80 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
16a90 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
16aa0 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
16ab0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
16ac0 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
16ad0 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ed. .**.** Each 
16ae0 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
16af0 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
16b00 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
16b10 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
16b20 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
16b30 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
16b40 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
16b50 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
16b60 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
16b70 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
16b80 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
16b90 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
16ba0 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
16bb0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
16bc0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
16bd0 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
16be0 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
16bf0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
16c00 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
16c10 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
16c20 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
16c30 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
16c40 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
16c50 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
16c60 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
16c70 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
16c80 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
16c90 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
16ca0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
16cb0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
16cc0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
16cd0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
16ce0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
16cf0 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
16d00 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
16d10 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
16d20 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
16d30 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
16d40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
16d50 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
16d60 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
16d70 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
16d80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16d90 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
16da0 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
16db0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
16dc0 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20    u8 ncFlags;   
16dd0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
16de0 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
16df0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
16e00 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
16e10 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
16e20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
16e30 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
16e40 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
16e50 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20  lowAgg  0x01    
16e60 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
16e70 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
16e80 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
16e90 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
16ea0 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f  0x02    /* One o
16eb0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
16ec0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
16ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
16ee0 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20  Check   0x04    
16ef0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
16f00 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
16f10 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
16f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
16f30 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20  nAggFunc 0x08   
16f40 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
16f50 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
16f60 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
16f70 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
16f80 74 49 64 78 20 20 20 30 78 31 30 20 20 20 20 2f  tIdx   0x10    /
16f90 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
16fa0 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
16fb0 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a  dex WHERE */../*
16fc0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
16fd0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16fe0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
16ff0 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
17000 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
17010 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
17020 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
17030 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
17040 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
17050 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
17060 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
17070 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
17080 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
17090 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
170a0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
170b0 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
170c0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
170d0 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
170e0 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
170f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
17100 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
17110 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
17120 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
17130 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
17140 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
17150 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
17160 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
17170 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
17180 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
17190 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
171a0 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
171b0 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
171c0 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
171d0 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
171e0 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
171f0 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
17200 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
17210 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
17220 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
17230 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
17240 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
17250 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
17260 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
17270 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
17280 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
17290 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
172a0 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
172b0 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
172c0 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
172d0 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
172e0 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
172f0 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
17300 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
17310 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
17320 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
17330 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
17340 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
17350 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
17360 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
17370 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
17380 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
17390 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
173a0 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
173b0 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
173c0 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
173d0 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
173e0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
173f0 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
17400 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
17410 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
17420 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
17430 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
17460 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
17470 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
17480 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
17490 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
174a0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
174b0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
174c0 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
174d0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
174e0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
174f0 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
17500 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61  nters */.  int a
17510 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
17520 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
17530 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
17540 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
17550 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63   */.  u64 nSelec
17560 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20  tRow;        /* 
17570 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
17580 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
17590 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
175a0 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
175b0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
175c0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
175d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
175e0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
175f0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
17600 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
17610 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
17620 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
17630 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
17640 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
17650 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
17660 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
17670 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
17680 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
17690 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
176a0 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
176b0 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
176c0 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
176d0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
176e0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
176f0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
17700 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
17710 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
17720 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
17730 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
17740 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
17750 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
17760 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
17770 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
17780 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
17790 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
177a0 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
177b0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
177c0 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
177d0 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
177e0 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
177f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
17800 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
17810 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
17820 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
17830 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
17840 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
17850 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
17860 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
17870 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
17880 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
17890 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
178a0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
178b0 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74  0x0002  /* Ident
178c0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
178d0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
178e0 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
178f0 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20  e       0x0004  
17900 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
17910 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17920 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
17930 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
17940 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68  0008  /* Uses th
17950 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
17960 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
17970 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
17980 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20       0x0010  /* 
17990 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
179a0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
179b0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
179c0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
179d0 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52     0x0020  /* FR
179e0 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
179f0 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
17a00 61 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  a */.           
17a10 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
17a20 30 78 30 30 34 30 20 20 4e 4f 54 20 55 53 45 44  0x0040  NOT USED
17a30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
17a40 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
17a50 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
17a60 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
17a70 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  S clause */.    
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a90 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20 20 4e  /*     0x0100  N
17aa0 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69  OT USED */.#defi
17ab0 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
17ac0 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a        0x0200  /*
17ad0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
17ae0 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
17af0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
17b00 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
17b10 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65     0x0400  /* Ne
17b20 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
17b30 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
17b40 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
17b50 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
17b60 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68     0x0800  /* Th
17b70 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
17b80 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
17b90 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
17ba0 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
17bb0 20 20 30 78 31 30 30 30 20 20 2f 2a 20 50 61 72    0x1000  /* Par
17bc0 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
17bd0 71 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  query */.../*.**
17be0 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
17bf0 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
17c00 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
17c10 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
17c20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
17c30 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
17c40 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
17c50 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
17c60 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
17c70 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
17c80 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
17c90 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
17ca0 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
17cb0 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
17cc0 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  x .**           
17cd0 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
17ce0 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
17cf0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
17d00 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
17d10 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
17d20 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
17d30 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
17d40 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
17d50 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
17d60 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
17d70 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
17d80 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
17d90 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
17dc0 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
17dd0 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
17de0 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
17df0 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
17e00 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
17e30 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
17e40 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
17e50 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
17e60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
17e70 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
17e80 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
17e90 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
17ea0 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
17eb0 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
17ec0 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
17ed0 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
17ee0 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
17ef0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
17f00 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
17f10 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
17f20 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
17f30 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
17f40 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
17f70 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
17f80 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
17f90 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
17fa0 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
17fb0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
17fc0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
17fd0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
17fe0 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
17ff0 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
18000 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
18010 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18030 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
18040 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
18050 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
18060 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18070 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
18080 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
18090 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
180a0 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
180b0 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
180c0 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
180d0 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
180e0 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
180f0 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
18100 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
18110 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
18120 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
18130 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a  st->iSDParm. .**
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61       Apply the a
18160 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61  ffinity pDest->a
18170 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74  ffSdst before st
18180 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20  oring.**        
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
181a0 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69  ults.  Used to i
181b0 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45  mplement "IN (SE
181c0 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a  LECT ...)"..**.*
181d0 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54  *     SRT_EphemT
181e0 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20  ab    Create an 
181f0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
18200 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61  pDest->iSDParm a
18210 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20  nd store.**     
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65  the result there
18240 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  . The cursor is 
18250 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a  left open after.
18260 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18270 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67         returning
18280 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20  .  This is like 
18290 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74  SRT_Table except
182a0 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
182c0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73  s destination us
182d0 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  es OP_OpenEpheme
182e0 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  ral to create.**
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66       the table f
18310 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  irst..**.**     
18320 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
18330 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f  Generate a co-ro
18340 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72  utine that retur
18350 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a  ns a new row of.
18360 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18370 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65         results e
18380 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69  ach time it is i
18390 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74  nvoked.  The ent
183a0 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20  ry point.**     
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  of the co-routin
183d0 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
183e0 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
183f0 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20  SDParm.**       
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
18410 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  d the result row
18420 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44   is stored in pD
18430 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73  est->nDest regis
18440 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ters.**         
18450 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
18460 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d  ting with pDest-
18470 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  >iSdst..**.**   
18480 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20    SRT_Table     
18490 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
184a0 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  in temporary tab
184b0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
184c0 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69  m..**     SRT_Fi
184d0 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69  fo        This i
184e0 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d  s like SRT_Ephem
184f0 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20  Tab except that 
18500 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  the table.**    
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61   is assumed to a
18530 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20  lready be open. 
18540 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a   SRT_Fifo has.**
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f       the additio
18570 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20  nal property of 
18580 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67  being able to ig
18590 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  nore.**         
185a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
185b0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
185c0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
185d0 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65  istFifo    Store
185e0 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
185f0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
18600 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73       But also us
18630 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
18640 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
18650 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  +1 as.**        
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72               a r
18670 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69  ecord of all pri
18680 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69  or results and i
18690 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63  gnore any duplic
186a0 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
186b0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e             rows.
186c0 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22    Name means:  "
186d0 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a  Distinct Fifo"..
186e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75  **.**     SRT_Qu
186f0 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  eue       Store 
18700 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
18710 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
18720 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79  >iSDParm (really
18730 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18740 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78          an index
18750 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71  ).  Append a seq
18760 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
18770 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73  that all entries
18780 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18790 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74          are dist
187a0 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  inct..**.**     
187b0 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
187c0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
187d0 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
187e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f  pDest->iSDParm o
187f0 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20  nly if.**       
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18810 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61  e same record ha
18820 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f  s never been sto
18830 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65  red before.  The
18840 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18850 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74          index at
18860 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
18870 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72  1 hold all prior
18880 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66   stores..*/.#def
18890 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
188a0 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
188b0 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
188c0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
188d0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
188e0 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
188f0 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
18900 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
18910 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
18920 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
18930 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
18940 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
18950 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
18960 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
18970 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
18980 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
18990 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  ywhere */.#defin
189a0 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20  e SRT_Fifo      
189b0 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
189c0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
189d0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
189e0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
189f0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
18a00 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    6  /* Like SRT
18a10 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75  _Fifo, but uniqu
18a20 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
18a30 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75  /.#define SRT_Qu
18a40 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  eue        7  /*
18a50 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
18a60 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65   an queue */.#de
18a70 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65  fine SRT_DistQue
18a80 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65  ue    8  /* Like
18a90 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20   SRT_Queue, but 
18aa0 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
18ab0 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  nly */../* The O
18ac0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
18ad0 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
18ae0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
18af0 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
18b00 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
18b10 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
18b20 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69  istQueue)..#defi
18b30 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
18b40 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74      9  /* Output
18b50 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
18b60 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
18b70 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31  RT_Mem         1
18b80 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
18b90 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
18ba0 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
18bb0 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31  RT_Set         1
18bc0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
18bd0 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
18be0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
18bf0 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
18c00 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65     12  /* Create
18c10 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
18c20 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
18c30 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
18c40 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
18c50 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61     13  /* Genera
18c60 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
18c70 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
18c80 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
18c90 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72       14  /* Stor
18ca0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
18cb0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
18cc0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a  ic rowid */../*.
18cd0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
18ce0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
18cf0 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
18d00 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
18d10 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
18d20 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
18d30 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
18d40 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
18d50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
18d60 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  ow to dispose of
18d70 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f   the results.  O
18d80 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65  n of SRT_* above
18d90 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53  . */.  char affS
18da0 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  dst;        /* A
18db0 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
18dc0 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
18dd0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
18de0 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
18df0 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
18e00 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
18e10 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
18e20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
18e30 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
18e40 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
18e50 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
18e60 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
18e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18e80 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
18e90 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
18ea0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
18eb0 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c  rBy;  /* Key col
18ec0 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65  umns for SRT_Que
18ed0 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51  ue and SRT_DistQ
18ee0 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ueue */.};../*.*
18ef0 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65  * During code ge
18f00 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74  neration of stat
18f10 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69  ements that do i
18f20 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f  nserts into AUTO
18f30 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61  INCREMENT .** ta
18f40 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
18f50 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
18f60 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
18f70 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
18f80 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
18f90 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
18fa0 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
18fb0 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
18fc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
18fd0 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
18fe0 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
18ff0 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
19000 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
19010 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
19020 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
19030 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77  serts are down w
19040 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
19050 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
19060 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
19070 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
19080 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
19090 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
190a0 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
190b0 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
190c0 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
190d0 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
190e0 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
190f0 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
19100 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
19110 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
19120 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
19130 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
19140 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
19150 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
19160 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
19170 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
19180 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
19190 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
191a0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
191b0 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
191c0 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
191d0 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
191e0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
191f0 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
19200 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
19210 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  ;../*.** Size of
19220 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
19230 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
19240 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23  ITE_N_COLCACHE.#
19250 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
19260 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e  _COLCACHE 10.#en
19270 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  dif../*.** At le
19280 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
19290 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
192a0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
192b0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
192c0 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
192d0 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
192e0 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
192f0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
19300 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
19310 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
19320 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
19330 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
19340 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
19350 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
19360 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
19370 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
19380 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
19390 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
193a0 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
193b0 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
193c0 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
193d0 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
193e0 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
193f0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
19400 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
19410 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
19420 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
19430 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
19440 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
19450 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
19460 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
19470 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
19480 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
19490 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
194a0 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
194b0 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
194c0 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
194d0 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
194e0 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
194f0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
19500 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
19510 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
19520 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
19530 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
19540 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
19550 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
19560 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
19570 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  T .** statements
19580 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
19590 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
195a0 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
195b0 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
195c0 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
195d0 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
195e0 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
195f0 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
19600 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
19610 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
19620 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
19630 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
19640 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
19650 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
19660 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
19670 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
19680 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
19690 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
196a0 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
196b0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
196c0 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
196d0 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
196e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
196f0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
19700 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
19710 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
19720 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
19730 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
19740 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
19750 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19760 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
19770 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
19780 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
19790 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
197a0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
197b0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
197c0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
197d0 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
197e0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
197f0 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
19800 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
19810 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
19820 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
19830 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
19840 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
19850 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
19860 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
19870 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
19880 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
19890 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
198a0 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
198b0 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
198c0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
198d0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
198e0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
198f0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
19900 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
19910 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
19920 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
19930 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
19940 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
19950 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
19960 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
19970 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
19980 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
19990 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
199a0 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
199b0 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
199c0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
199d0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
199e0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
199f0 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
19a00 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
19a10 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
19a20 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
19a30 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
19a40 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
19a50 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
19a60 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
19a70 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
19a80 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
19a90 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
19aa0 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
19ab0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
19ac0 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
19ad0 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
19ae0 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
19af0 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
19b00 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
19b10 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
19b20 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
19b30 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
19b40 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
19b50 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
19b60 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
19b70 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
19b80 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
19b90 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
19ba0 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
19bb0 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
19bc0 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
19bd0 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
19be0 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
19bf0 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
19c00 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
19c10 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
19c20 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
19c30 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
19c40 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
19c50 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
19c60 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
19c70 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
19c80 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
19c90 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
19ca0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
19cb0 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
19cc0 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
19cd0 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
19ce0 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
19cf0 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
19d00 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
19d10 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
19d20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
19d30 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
19d40 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
19d50 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
19d60 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
19d70 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
19d80 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
19d90 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
19da0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
19db0 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
19dc0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
19dd0 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
19de0 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
19df0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
19e00 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
19e10 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
19e20 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
19e30 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
19e40 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
19e50 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
19e60 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
19e70 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
19e80 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
19e90 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
19ea0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
19eb0 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
19ec0 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
19ed0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
19ee0 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
19ef0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
19f00 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
19f10 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
19f20 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
19f30 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
19f40 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
19f50 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
19f60 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
19f70 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
19f80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
19f90 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
19fa0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
19fb0 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
19fc0 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
19fd0 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
19fe0 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
19ff0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1a000 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1a010 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1a020 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1a030 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1a040 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  s */.  int aTemp
1a050 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48  Reg[8];     /* H
1a060 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
1a070 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1a080 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  ers */.  int nRa
1a090 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1a0a0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1a0b0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1a0c0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1a0d0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1a0e0 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1a0f0 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1a100 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1a110 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1a120 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a130 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1a140 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1a150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a160 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1a170 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1a180 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1a190 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1a1a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a1b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1a1c0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1a1d0 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
1a1e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a1f0 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
1a200 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65  r */.  int nOnce
1a210 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1a220 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65  umber of OP_Once
1a230 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f   instructions so
1a240 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1a250 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
1a260 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
1a270 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
1a280 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1a290 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20  int iFixedOp;   
1a2a0 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61       /* Never ba
1a2b0 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69  ck out opcodes i
1a2c0 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72  FixedOp-1 or ear
1a2d0 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b  lier */.  int ck
1a2e0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
1a2f0 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1a300 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
1a310 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
1a320 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49   */.  int iPartI
1a330 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61  dxTab;     /* Ta
1a340 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1a350 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69  g to a partial i
1a360 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ndex */.  int iC
1a370 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1a380 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1a390 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1a3a0 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1a3b0 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1a3c0 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1a3d0 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1a3e0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1a3f0 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1a400 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1a410 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1a420 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1a430 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1a440 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1a450 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1a460 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1a470 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1a480 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1a490 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1a4a0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1a4b0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1a4c0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1a4d0 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1a4e0 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1a4f0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1a500 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1a510 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1a520 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1a530 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1a540 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1a550 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1a560 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1a570 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1a580 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1a590 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1a5a0 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1a5b0 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1a5c0 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1a5d0 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1a5e0 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1a5f0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1a600 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1a610 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1a620 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1a630 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1a640 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1a650 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1a660 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1a670 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1a680 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1a690 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1a6a0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1a6b0 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1a6c0 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1a6d0 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1a6e0 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1a6f0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1a700 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1a710 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1a720 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1a730 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1a740 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1a750 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
1a760 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
1a770 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
1a780 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
1a790 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
1a7a0 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
1a7b0 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1a7c0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a7d0 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1a7e0 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1a7f0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1a800 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1a810 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1a820 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1a830 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1a840 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1a850 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1a860 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1a870 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1a880 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 6e  -program */.#ifn
1a890 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a8a0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1a8b0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1a8c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a8d0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1a8e0 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1a8f0 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1a900 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1a910 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1a920 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1a930 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1a940 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1a950 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1a960 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1a970 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1a980 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1a990 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1a9a0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1a9b0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1a9c0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1a9d0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1a9e0 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1a9f0 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1aa00 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1aa10 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1aa20 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1aa30 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1aa40 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1aa50 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1aa60 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1aa70 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1aa80 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1aa90 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b    int addrSkipPK
1aaa0 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
1aab0 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e  s of instruction
1aac0 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59   to skip PRIMARY
1aad0 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20   KEY index */.  
1aae0 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1aaf0 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1ab00 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1ab10 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1ab20 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1ab30 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1ab40 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1ab50 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1ab60 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1ab70 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1ab80 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1ab90 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1aba0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1abb0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1abc0 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1abd0 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1abe0 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1abf0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1ac00 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1ac10 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1ac20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1ac30 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1ac40 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1ac50 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1ac60 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1ac70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ac80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ac90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1aca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1acb0 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1acc0 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1acd0 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1ace0 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1acf0 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1ad00 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1ad10 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1ad20 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1ad30 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1ad40 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1ad50 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1ad60 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1ad70 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1ad80 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1ad90 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1ada0 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1adb0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1adc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1add0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ade0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1adf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1ae00 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ae20 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1ae30 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1ae40 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1ae50 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ae70 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1ae80 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1ae90 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1aea0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1aeb0 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1aec0 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1aed0 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1aee0 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20  u8 bFreeWith;   
1aef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1af00 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c  e if pWith shoul
1af10 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20  d be freed with 
1af20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65  parser */.  u8 e
1af30 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1af40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1af50 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1af60 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1af70 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1af80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1af90 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1afa0 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1afb0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1afc0 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1afd0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1afe0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1aff0 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1b000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1b010 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1b020 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1b030 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1b040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b050 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1b060 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1b070 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1b080 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1b090 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1b0a0 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1b0b0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1b0c0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1b0d0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1b0e0 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1b100 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1b110 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1b120 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1b130 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1b140 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1b150 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1b160 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1b170 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1b180 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1b190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1b1a0 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1b1b0 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1b1c0 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1b1d0 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1b1e0 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1b1f0 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1b200 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1b210 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1b220 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1b230 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1b240 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1b250 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1b260 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1b270 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1b280 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1b290 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1b2a0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1b2b0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1b2c0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1b2d0 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1b2e0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1b2f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1b300 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1b310 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1b320 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1b330 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1b340 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1b350 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1b360 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1b370 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1b380 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1b390 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1b3a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1b3b0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1b3c0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1b3d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1b3e0 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1b3f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b400 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1b410 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1b420 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1b430 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1b440 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1b450 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1b460 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1b470 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1b480 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1b490 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1b4a0 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1b4b0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1b4c0 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1b4d0 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1b4e0 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1b4f0 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1b500 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1b510 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1b520 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1b530 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1b540 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a   or NULL */.};..
1b550 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1b560 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1b570 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1b580 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1b590 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1b5a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1b5b0 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1b5c0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1b5d0 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1b5e0 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1b5f0 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1b600 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1b610 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1b620 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1b630 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1b640 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1b650 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1b660 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1b670 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1b680 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1b690 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1b6a0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1b6b0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1b6c0 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1b6d0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1b6e0 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1b6f0 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1b700 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1b710 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1b720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1b730 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1b740 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1b750 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1b760 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1b770 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1b780 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1b790 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1b7a0 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
1b7b0 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
1b7c0 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
1b7d0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1b7e0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1b7f0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1b800 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1b810 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1b820 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1b830 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1b840 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1b850 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1b860 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1b870 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1b880 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1b890 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1b8a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1b8b0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1b8c0 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1b8d0 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1b8e0 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1b8f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1b900 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
1b910 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
1b920 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
1b930 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
1b940 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1b950 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
1b960 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
1b970 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1b980 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
1b990 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
1b9a0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
1b9b0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1b9c0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
1b9d0 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
1b9e0 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
1b9f0 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
1ba00 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
1ba10 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
1ba20 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
1ba30 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1ba40 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
1ba50 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
1ba60 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
1ba70 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
1ba80 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
1ba90 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1baa0 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
1bab0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
1bac0 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
1bad0 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
1bae0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1baf0 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
1bb00 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
1bb10 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
1bb20 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
1bb30 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
1bb40 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1bb50 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
1bb60 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
1bb70 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
1bb80 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
1bb90 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
1bba0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
1bbb0 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
1bbc0 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
1bbd0 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
1bbe0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
1bbf0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
1bc00 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
1bc10 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1bc20 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
1bc30 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
1bc40 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
1bc50 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
1bc60 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
1bc70 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
1bc80 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
1bc90 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
1bca0 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
1bcb0 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
1bcc0 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
1bcd0 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
1bce0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
1bcf0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
1bd00 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
1bd10 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
1bd20 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1bd30 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
1bd40 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
1bd50 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
1bd60 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
1bd70 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
1bd80 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
1bd90 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
1bda0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1bdb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
1bdc0 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
1bdd0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
1bde0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
1bdf0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
1be00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
1be10 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
1be20 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
1be30 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
1be40 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1be50 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1be60 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1be70 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
1be80 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
1be90 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
1bea0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
1beb0 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
1bec0 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
1bed0 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
1bee0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1bef0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1bf00 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
1bf10 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
1bf20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
1bf30 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
1bf40 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
1bf50 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
1bf60 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
1bf90 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
1bfa0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
1bfb0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1bfc0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
1bfd0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1bfe0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
1bff0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
1c000 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1c010 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
1c020 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
1c030 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
1c040 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
1c050 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
1c060 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
1c070 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
1c080 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1c090 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
1c0a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1c0b0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
1c0c0 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
1c0d0 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
1c0e0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
1c0f0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
1c100 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
1c110 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
1c120 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
1c130 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
1c140 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
1c150 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
1c160 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
1c170 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
1c180 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
1c190 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
1c1a0 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
1c1b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
1c1c0 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
1c1d0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
1c1e0 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
1c1f0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
1c200 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1c210 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
1c220 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
1c230 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
1c240 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
1c250 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1c260 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
1c270 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1c280 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
1c290 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
1c2a0 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
1c2b0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
1c2c0 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
1c2d0 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
1c2e0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1c2f0 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
1c300 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
1c310 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
1c320 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
1c330 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
1c340 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
1c350 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
1c360 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
1c370 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
1c380 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
1c390 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
1c3a0 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
1c3b0 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
1c3c0 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
1c3d0 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
1c3e0 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
1c3f0 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
1c400 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
1c410 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
1c420 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
1c430 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
1c440 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
1c450 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
1c460 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
1c470 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1c480 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1c490 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1c4a0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1c4b0 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1c4c0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1c4d0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1c4e0 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1c4f0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1c500 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1c510 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
1c520 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1c530 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1c540 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1c550 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
1c560 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
1c570 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1c580 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1c590 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
1c5a0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1c5c0 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
1c5d0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
1c5e0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1c5f0 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
1c600 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1c610 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
1c620 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
1c630 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
1c640 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1c650 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1c660 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1c670 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1c690 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1c6a0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1c6b0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1c6c0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1c6d0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1c6e0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1c6f0 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1c700 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1c710 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1c720 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1c730 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1c740 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1c750 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1c760 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1c770 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
1c780 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65  UPDATE). * targe
1c790 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1c7a0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1c7b0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1c7c0 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72  able to update r
1c7d0 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72  ows of.. * pWher
1c7e0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1c7f0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1c800 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1c810 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1c820 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1c830 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1c840 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
1c850 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
1c860 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
1c870 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
1c880 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
1c890 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
1c8a0 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
1c8b0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
1c8c0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
1c8d0 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
1c8f0 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
1c900 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1c910 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
1c920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1c930 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1c940 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1c950 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
1c960 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
1c970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
1c980 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
1c990 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1c9a0 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
1c9b0 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
1c9c0 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
1c9d0 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
1c9e0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
1c9f0 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20  SELECT statment 
1ca00 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1ca10 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20   INTO .. SELECT 
1ca20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74  ... */.  Token t
1ca30 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
1ca40 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1ca50 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1ca60 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1ca70 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1ca80 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1ca90 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1caa0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1cab0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1cac0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1cad0 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1cae0 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
1caf0 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
1cb00 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
1cb10 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
1cb20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
1cb30 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
1cb40 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
1cb50 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1cb60 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
1cb70 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
1cb80 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
1cb90 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
1cba0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1cbb0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1cbc0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
1cbd0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
1cbe0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
1cbf0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
1cc00 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
1cc10 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
1cc20 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
1cc30 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
1cc40 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .  .*/.typedef s
1cc50 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
1cc60 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
1cc70 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
1cc80 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
1cc90 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
1cca0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
1ccb0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
1ccc0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1ccd0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
1cce0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
1ccf0 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
1cd00 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
1cd10 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
1cd20 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
1cd30 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
1cd40 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
1cd50 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
1cd60 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
1cd70 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
1cd80 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
1cd90 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
1cda0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
1cdb0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1cdc0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1cdd0 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
1cde0 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
1cdf0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
1ce00 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1ce10 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1ce20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1ce30 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
1ce40 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
1ce50 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
1ce60 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
1ce70 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1ce80 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
1ce90 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
1cea0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
1ceb0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
1cec0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1ced0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
1cee0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
1cef0 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
1cf00 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
1cf10 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
1cf20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
1cf30 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
1cf40 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
1cf50 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
1cf60 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
1cf70 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
1cf80 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43  far */.  int  nC
1cf90 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
1cfa0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
1cfb0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
1cfc0 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20    int  nAlloc;  
1cfd0 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
1cfe0 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
1cff0 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
1d000 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20    int  mxAlloc; 
1d010 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1d020 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67  m allowed string
1d030 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20   length */.  u8 
1d040 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20    useMalloc;    
1d050 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31    /* 0: none,  1
1d060 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  : sqlite3DbMallo
1d070 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d  c,  2: sqlite3_m
1d080 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20  alloc */.  u8   
1d090 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
1d0a0 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
1d0b0 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
1d0c0 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  OBIG */.};.#defi
1d0d0 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  ne STRACCUM_NOME
1d0e0 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54  M   1.#define ST
1d0f0 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32  RACCUM_TOOBIG  2
1d100 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
1d110 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
1d120 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
1d130 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
1d140 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
1d150 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
1d160 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
1d170 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
1d180 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
1d190 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
1d1a0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1d1b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
1d1c0 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
1d1d0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
1d1e0 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
1d1f0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1d200 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1d210 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1d220 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
1d230 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1d240 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
1d250 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
1d260 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1d270 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1d280 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
1d290 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
1d2a0 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
1d2b0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
1d2c0 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
1d2d0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
1d2e0 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
1d2f0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
1d300 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
1d310 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
1d320 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1d330 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
1d340 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
1d350 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1d360 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1d370 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
1d380 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
1d390 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d3b0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1d3c0 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
1d3d0 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
1d3e0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1d3f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1d400 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
1d410 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
1d420 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
1d430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d440 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
1d450 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
1d460 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
1d470 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
1d480 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1d490 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
1d4a0 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
1d4b0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
1d4c0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
1d4d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1d4e0 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
1d4f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
1d500 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
1d510 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
1d520 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
1d530 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
1d540 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1d570 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1d580 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1d590 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1d5a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1d5b0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1d5c0 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1d5d0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1d5e0 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1d5f0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1d600 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1d610 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1d620 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1d630 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1d640 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1d650 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1d660 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1d670 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1d680 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1d690 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1d6a0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1d6b0 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d6d0 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1d6e0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1d6f0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1d700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1d710 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1d720 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1d730 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1d740 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1d750 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1d760 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1d770 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1d780 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1d790 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1d7a0 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1d7b0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1d7c0 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1d7d0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1d7e0 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1d7f0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1d800 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1d810 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1d820 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1d830 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1d860 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1d870 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1d880 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1d890 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d8a0 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1d8b0 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1d8c0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1d8d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1d8e0 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1d8f0 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1d920 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1d930 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1d940 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d960 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1d970 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1d980 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1d990 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1d9a0 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1d9b0 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1d9c0 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1d9d0 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1d9e0 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1d9f0 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1da00 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1da10 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  led */.  /* The 
1da20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
1da30 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
1da40 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
1da50 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
1da60 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
1da70 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
1da80 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
1da90 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dab0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
1dac0 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
1dad0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
1dae0 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1db00 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
1db10 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
1db20 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
1db30 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
1db40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1db50 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
1db60 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
1db70 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1db80 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
1db90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1dba0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1dbb0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1dbc0 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
1dbd0 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
1dbe0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1dbf0 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1dc00 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1dc10 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
1dc20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1dc30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
1dc40 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
1dc50 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
1dc60 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1dc70 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1dc80 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1dc90 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1dca0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
1dcb0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
1dcc0 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
1dcd0 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
1dce0 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
1dcf0 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1dd10 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
1dd20 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
1dd30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1dd40 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
1dd50 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
1dd60 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1dd70 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
1dd80 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
1dd90 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
1dda0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
1ddb0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
1ddc0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
1ddd0 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
1dde0 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
1ddf0 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
1de00 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
1de10 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
1de20 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
1de30 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
1de40 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
1de50 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
1de60 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c  d*,int iSrcLine,
1de70 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
1de80 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
1de90 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
1dea0 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ded0 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
1dee0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1def0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
1df00 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28  TIN_TEST.  int (
1df10 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
1df20 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
1df30 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
1df40 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
1df50 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
1df60 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1df70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1df80 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1df90 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1dfa0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
1dfb0 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
1dfc0 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
1dfd0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
1dfe0 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
1dff0 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
1e000 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
1e010 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
1e020 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
1e030 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
1e040 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
1e050 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
1e060 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
1e070 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
1e080 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
1e090 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
1e0a0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
1e0b0 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
1e0c0 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
1e0d0 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
1e0e0 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
1e0f0 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
1e100 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
1e110 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
1e120 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
1e130 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
1e140 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
1e150 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
1e160 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1e170 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
1e180 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
1e190 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
1e1a0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
1e1b0 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
1e1c0 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
1e1d0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1e1e0 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
1e1f0 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
1e200 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
1e210 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
1e220 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
1e230 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
1e240 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
1e250 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
1e260 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
1e270 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
1e280 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
1e290 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
1e2a0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
1e2b0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1e2c0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
1e2d0 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
1e2e0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1e2f0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
1e300 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
1e310 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
1e320 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
1e330 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1e340 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1e370 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1e380 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
1e390 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e3b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
1e3c0 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f  ueries */.  unio
1e3d0 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
1e400 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
1e410 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
1e420 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
1e450 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
1e460 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
1e490 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53  r value */.    S
1e4a0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1e4b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e4c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
1e4d0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
1e4e0 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
1e4f0 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
1e500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1e510 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
1e520 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1e530 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
1e540 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
1e550 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
1e560 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
1e570 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1e580 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
1e590 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
1e5a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1e5b0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
1e5c0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1e5d0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1e5e0 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
1e5f0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1e600 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
1e610 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
1e620 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
1e630 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
1e640 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
1e650 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
1e660 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
1e670 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
1e680 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
1e690 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
1e6a0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
1e6b0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
1e6c0 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
1e6d0 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
1e6e0 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
1e6f0 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
1e700 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
1e710 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
1e720 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
1e730 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
1e740 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1e750 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1e760 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
1e770 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
1e780 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
1e790 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
1e7a0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
1e7b0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
1e7c0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1e7d0 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
1e7e0 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e800 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
1e810 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1e820 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
1e830 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
1e840 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
1e850 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
1e860 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
1e870 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e890 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
1e8a0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1e8b0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
1e8c0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e8e0 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
1e8f0 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
1e900 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
1e910 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1e920 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
1e930 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
1e940 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1e950 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
1e960 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
1e970 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
1e980 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
1e990 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20  st char *zErr;  
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e9b0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
1e9c0 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
1e9d0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
1e9e0 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  ];.};../*.** Ass
1e9f0 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1ea00 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1ea10 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1ea20 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1ea30 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1ea40 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1ea50 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1ea60 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1ea70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1ea80 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1ea90 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1eaa0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1eab0 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1eac0 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1eaf0 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1eb00 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1eb20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb50 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1eb60 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1eb70 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1eb80 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1eb90 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1eba0 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1ebb0 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1ebc0 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1ebd0 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1ebe0 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1ebf0 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1ec00 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1ec10 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1ec20 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1ec30 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1ec40 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1ec50 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1ec60 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1ec70 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1ec80 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1ec90 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1eca0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1ecb0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1ecc0 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1ecd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1ece0 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1ecf0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1ed00 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1ed10 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1ed20 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1ed30 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1ed40 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1ed50 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1ed60 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1ed70 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1ed80 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1ed90 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1eda0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1edb0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1edc0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1edd0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1ede0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1edf0 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1ee00 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1ee10 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1ee20 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c  o all.** the SQL
1ee30 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1ee40 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1ee50 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20  s an alisse for 
1ee60 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1ee70 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1ee80 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1ee90 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1eea0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1eeb0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1eec0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1eed0 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1eee0 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1eef0 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1ef00 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1ef10 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1ef20 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1ef30 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1ef40 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1ef50 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1ef60 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ef70 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1ef80 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1ef90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1efa0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1efb0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1efc0 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1efd0 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1efe0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1eff0 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1f000 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1f010 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1f020 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1f030 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1f040 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1f050 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1f060 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1f070 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1f080 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1f090 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1f0a0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1f0b0 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1f0c0 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1f0d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f0e0 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1f0f0 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1f100 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1f110 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1f120 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1f130 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1f140 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f150 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f160 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1f170 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1f180 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f190 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f1a0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1f1b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f1c0 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1f1d0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f1e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f1f0 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1f200 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1f210 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1f220 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f230 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1f240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1f250 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1f260 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f270 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f280 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1f290 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1f2a0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1f2b0 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1f2c0 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1f2d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1f2e0 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1f2f0 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1f300 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1f310 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1f320 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1f330 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f340 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1f350 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1f360 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1f370 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1f380 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f390 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
1f3a0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1f3b0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1f3c0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1f3d0 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1f3e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1f3f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1f400 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1f410 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1f420 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1f430 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1f440 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1f450 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1f460 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1f470 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1f480 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1f490 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1f4a0 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1f4b0 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1f4c0 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1f4d0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1f4e0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1f4f0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1f500 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1f510 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1f520 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1f530 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1f540 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1f550 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1f560 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1f570 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1f580 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1f590 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1f5a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1f5b0 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1f5c0 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1f5d0 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1f5e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1f5f0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1f600 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1f610 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1f620 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1f630 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1f640 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1f650 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1f660 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1f670 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1f680 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1f690 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1f6a0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1f6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1f6c0 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1f6d0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1f6e0 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1f6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1f700 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1f710 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1f720 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1f730 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1f740 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1f750 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1f760 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1f770 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1f780 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1f790 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1f7a0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1f7b0 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1f7c0 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
1f7d0 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
1f7e0 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
1f7f0 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
1f800 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
1f810 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
1f820 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
1f830 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
1f840 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
1f850 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
1f860 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
1f870 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
1f880 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
1f890 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
1f8a0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
1f8b0 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
1f8c0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
1f8d0 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
1f8e0 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
1f8f0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
1f900 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
1f910 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
1f920 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
1f930 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
1f940 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
1f950 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
1f960 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
1f970 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
1f980 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1f990 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
1f9a0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
1f9b0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1f9c0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
1f9d0 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
1f9e0 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
1f9f0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1fa00 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
1fa10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fa20 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1fa30 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
1fa40 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
1fa50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1fa60 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1fa70 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1fa80 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
1fa90 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1faa0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
1fab0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
1fac0 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
1fad0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1fae0 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
1faf0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1fb00 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1fb10 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
1fb20 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1fb30 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1fb40 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
1fb50 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1fb60 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1fb70 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
1fb80 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
1fb90 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
1fba0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1fbb0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1fbc0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
1fbd0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1fbe0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1fbf0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
1fc00 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
1fc10 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
1fc20 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1fc30 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
1fc40 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
1fc50 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
1fc60 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
1fc70 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
1fc80 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
1fc90 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1fca0 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
1fcb0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1fcc0 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
1fcd0 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
1fce0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
1fcf0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
1fd00 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
1fd10 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
1fd20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1fd30 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
1fd40 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1fd50 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1fd60 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1fd70 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
1fd80 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
1fd90 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
1fda0 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
1fdb0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
1fdc0 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
1fdd0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
1fde0 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
1fdf0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fe10 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
1fe20 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
1fe30 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
1fe40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fe50 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
1fe60 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
1fe70 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
1fe80 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
1fe90 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
1fea0 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51  /.};..#define SQ
1feb0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
1fec0 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e  RNAL 0x01.#defin
1fed0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
1fee0 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f  SQLFUNC  0x02.vo
1fef0 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
1ff00 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
1ff10 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
1ff20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73  va_list);.void s
1ff30 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
1ff40 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f  rAccum*, u32, co
1ff50 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1ff60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
1ff70 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
1ff80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1ff90 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
1ffa0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1ffb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
1ffc0 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71  _list);.char *sq
1ffd0 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71  lite3MAppendf(sq
1ffe0 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e  lite3*,char*,con
1fff0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
20000 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20010 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e  E_TEST) || defin
20020 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
20030 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
20040 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
20050 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
20060 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
20070 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
20080 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
20090 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
200a0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
200b0 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61  ./* Output forma
200c0 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45  tting for SQLITE
200d0 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49  _TESTCTRL_EXPLAI
200e0 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  N */.#if defined
200f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54  (SQLITE_ENABLE_T
20100 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76  REE_EXPLAIN).  v
20110 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20120 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a  inBegin(Vdbe*);.
20130 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20140 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65  plainPrintf(Vdbe
20150 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20160 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ...);.  void sql
20170 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64  ite3ExplainNL(Vd
20180 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
20190 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28  ite3ExplainPush(
201a0 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
201b0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70  qlite3ExplainPop
201c0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
201d0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
201e0 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  nish(Vdbe*);.  v
201f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20200 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20  inSelect(Vdbe*, 
20210 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
20220 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
20230 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a  xpr(Vdbe*, Expr*
20240 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20250 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
20260 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74  (Vdbe*, ExprList
20270 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *);.  const char
20280 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78 70   *sqlite3VdbeExp
20290 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b  lanation(Vdbe*);
202a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
202b0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
202c0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
202d0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
202e0 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69  lect(A,B).# defi
202f0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
20300 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66  nExpr(A,B).# def
20310 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
20320 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a  inExprList(A,B).
20330 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20340 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29  ExplainFinish(X)
20350 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20360 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
20370 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76  (X) 0.#endif...v
20380 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
20390 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
203a0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
203b0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
203c0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
203d0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
203e0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
203f0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
20400 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
20410 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
20420 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
20430 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20440 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
20450 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
20460 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
20470 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
20480 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
20490 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
204a0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
204b0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
204c0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
204d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
204e0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
204f0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
20500 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
20510 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
20520 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
20530 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
20540 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
20550 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
20560 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
20570 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
20580 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
20590 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
205a0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
205b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
205c0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
205d0 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
205e0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
205f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
20600 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
20610 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
20620 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
20630 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
20640 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
20650 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
20660 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
20670 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
20680 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
20690 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
206a0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
206b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
206c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
206d0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
206e0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
206f0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
20700 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
20710 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
20720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20730 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
20740 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
20750 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
20760 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
20770 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
20780 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
20790 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
207a0 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
207b0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
207c0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
207d0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
207e0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
207f0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
20800 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
20810 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
20820 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
20830 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
20840 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
20850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
20860 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
20870 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
20880 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
20890 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
208a0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
208b0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
208c0 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
208d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
208e0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
208f0 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
20900 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
20910 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
20920 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
20930 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
20940 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
20950 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
20960 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
20970 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
20980 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
20990 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
209a0 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
209b0 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
209c0 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
209d0 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
209e0 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
209f0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
20a00 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
20a10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20a20 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
20a30 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
20a40 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
20a50 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
20a60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
20a70 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
20a80 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
20a90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
20aa0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
20ab0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
20ac0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
20ad0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
20ae0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
20af0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
20b00 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
20b10 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
20b20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
20b30 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
20b40 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
20b50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
20b60 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
20b70 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
20b80 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
20b90 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
20ba0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
20bb0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
20bc0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
20bd0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
20be0 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
20bf0 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
20c00 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
20c10 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
20c20 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
20c30 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
20c40 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  se *);..#ifdef S
20c50 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
20c60 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65  IN_TEST.# define
20c70 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
20c80 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
20c90 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
20ca0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
20cb0 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
20cc0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
20cd0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
20ce0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
20cf0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
20d00 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
20d10 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
20d20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
20d30 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
20d40 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
20d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
20d60 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
20d70 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
20d80 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
20d90 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
20da0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
20db0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
20dc0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
20dd0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
20de0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
20df0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
20e00 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
20e10 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
20e20 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
20e30 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
20e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
20e50 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
20e60 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
20e70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
20e80 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
20e90 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
20ea0 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
20eb0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
20ec0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
20ed0 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
20ee0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
20ef0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
20f00 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
20f10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
20f20 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
20f30 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
20f40 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
20f50 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
20f60 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
20f70 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
20f80 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
20f90 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
20fa0 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
20fb0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
20fc0 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
20fd0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
20fe0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
20ff0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
21000 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21010 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
21020 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
21030 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21040 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
21050 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
21060 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
21070 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
21080 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
21090 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
210a0 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
210b0 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
210c0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
210d0 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
210e0 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
210f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
21100 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
21110 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
21120 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
21130 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
21140 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
21150 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
21160 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
21170 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
21180 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
21190 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
211a0 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
211b0 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
211c0 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
211d0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
211e0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
211f0 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
21200 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
21210 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
21220 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
21230 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
21240 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
21250 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
21260 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
21270 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
21280 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
21290 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
212a0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
212b0 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
212c0 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
212d0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
212e0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
212f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21300 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
21310 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
21320 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
21330 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
21340 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
21350 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
21360 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ken *);.int sqli
21370 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
21380 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
21390 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
213a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
213b0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
213c0 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
213d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
213e0 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
213f0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
21400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21410 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
21420 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
21430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
21440 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
21450 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
21460 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
21470 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
21480 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
21490 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65  nt,char**);.Inde
214a0 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
214b0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
214c0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
214d0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
214e0 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21500 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
21510 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21520 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
21530 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
21540 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
21550 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
21560 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
21570 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
21580 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
21590 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
215a0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
215b0 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
215e0 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
215f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21600 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
21610 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
21620 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
21630 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
21640 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
21650 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
21660 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
21670 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
21680 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
21690 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
216a0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
216b0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
216c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
216d0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
216e0 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
216f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21700 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
21710 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
21720 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
21730 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
21740 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
21750 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
21760 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
21770 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
21780 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
21790 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
217a0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
217b0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
217c0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
217d0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
217e0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
217f0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
21800 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
21810 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
21820 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
21830 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
21840 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65  u64 sqlite3Where
21850 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
21860 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
21870 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
21880 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
21890 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
218a0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
218b0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
218c0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
218d0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
218e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
218f0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
21900 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
21910 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
21920 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
21930 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
21940 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
21950 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
21960 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
21970 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
21980 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
21990 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
219a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
219b0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
219c0 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
219d0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
219e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
219f0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
21a00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
21a10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21a20 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
21a30 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
21a40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21a50 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
21a60 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
21a70 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
21a80 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
21a90 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21aa0 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
21ab0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21ac0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
21ad0 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
21ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21af0 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
21b00 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
21b10 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21b20 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
21b30 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
21b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21b50 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
21b60 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
21b70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21b80 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
21b90 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
21ba0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
21bb0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
21bc0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
21bd0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
21be0 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
21bf0 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
21c00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21c10 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
21c20 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
21c30 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
21c40 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
21c50 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
21c60 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38  prList*, int, u8
21c70 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
21c80 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
21c90 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
21ca0 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
21cb0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
21cc0 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
21cd0 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
21ce0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
21cf0 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  erms */.void sql
21d00 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
21d10 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
21d20 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21d30 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
21d40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
21d50 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
21d60 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
21d70 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
21d80 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
21d90 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
21da0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
21db0 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
21dc0 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
21dd0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
21de0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
21df0 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
21e00 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
21e10 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
21e20 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
21e30 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
21e40 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21e50 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
21e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
21e70 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
21e80 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
21e90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
21ea0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
21eb0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
21ec0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
21ed0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
21ee0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
21ef0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
21f00 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
21f10 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
21f20 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
21f30 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
21f40 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
21f50 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
21f60 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
21f70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21f80 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
21f90 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
21fa0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
21fb0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
21fc0 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20  liesExpr(Expr*, 
21fd0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
21fe0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
21ff0 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
22000 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
22010 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22020 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
22030 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
22040 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
22050 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
22060 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
22070 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
22080 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
22090 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  be(Parse*);.void
220a0 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
220b0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
220c0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
220d0 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
220e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
220f0 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
22100 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22110 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
22120 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
22130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22140 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
22150 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
22160 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
22170 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
22180 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
22190 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
221a0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
221b0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
221c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
221d0 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
221e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
221f0 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
22200 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
22210 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22220 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
22230 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
22240 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
22250 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
22260 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
22270 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
22280 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
22290 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
222a0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
222b0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
222c0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
222d0 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
222e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
222f0 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
22300 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
22310 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
22320 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
22330 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22340 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
22350 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
22360 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
22370 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
22380 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22390 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
223a0 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65  eRowDelete(Parse
223b0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
223c0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
223d0 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  6,u8,u8,u8);.voi
223e0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
223f0 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
22400 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
22410 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  int, int, int*);
22420 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
22430 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
22440 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
22450 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
22460 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
22470 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
22480 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
22490 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
224a0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
224b0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
224c0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
224d0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
224e0 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22500 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
22510 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
22520 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
22530 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
22540 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
22550 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
22560 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22570 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
22580 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
22590 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  e*, int, int, u8
225a0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
225b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
225c0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
225d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
225e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
225f0 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
22600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
22610 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
22620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
22630 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
22640 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
22650 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
22660 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
22670 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
22680 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
22690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
226a0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
226b0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
226c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
226d0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
226e0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
226f0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
22700 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
22710 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
22720 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22730 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
22740 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
22750 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
22760 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
22770 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
22780 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
22790 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
227a0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
227b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  ;.void sqlite3Fu
227c0 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
227d0 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
227e0 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
227f0 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
22800 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
22810 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
22820 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
22830 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
22840 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
22850 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
22860 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
22870 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
22880 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
22890 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
228a0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
228b0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
228c0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
228d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
228e0 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
228f0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
22900 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
22910 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
22920 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
22930 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
22940 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
22950 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
22960 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
22970 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
22980 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22990 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
229a0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
229b0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
229c0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
229d0 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
229e0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
229f0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
22a00 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
22a30 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
22a40 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
22a50 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
22a60 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
22a70 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
22a80 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
22a90 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
22aa0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
22ab0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
22ac0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
22ad0 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
22ae0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
22af0 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
22b00 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
22b10 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
22b20 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
22b30 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
22b40 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
22b50 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
22b60 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
22b70 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
22b80 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
22b90 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
22ba0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22bc0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
22bd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
22be0 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
22bf0 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
22c00 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
22c10 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
22c20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
22c30 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
22c40 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
22c50 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
22c60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
22c70 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
22c80 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
22c90 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
22ca0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
22cb0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
22cc0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
22cd0 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
22ce0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
22cf0 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
22d00 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
22d10 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
22d40 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
22d50 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
22d60 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
22d70 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
22d80 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
22d90 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
22da0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
22db0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
22dc0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
22dd0 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
22de0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
22df0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
22e00 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
22e10 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
22e20 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
22e30 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
22e40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
22e50 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
22e60 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
22e70 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
22e80 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
22e90 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
22ea0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
22eb0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
22ec0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
22ed0 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
22ee0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22ef0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
22f00 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
22f10 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
22f20 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
22f30 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
22f40 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
22f50 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
22f60 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
22f70 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
22f80 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
22f90 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
22fa0 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
22fb0 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
22fc0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
22fd0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
22fe0 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
22ff0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
23000 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
23010 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
23020 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
23030 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
23040 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
23050 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
23060 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
23070 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
23080 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
23090 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
230a0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
230b0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
230c0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
230d0 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
230e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
230f0 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
23100 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
23110 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
23120 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
23130 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
23140 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
23150 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
23160 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
23170 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
23180 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
23190 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
231a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
231b0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
231c0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
231d0 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
231e0 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
231f0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
23200 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
23210 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
23220 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
23230 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
23240 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
23250 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
23260 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
23270 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
23280 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
23290 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
232a0 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
232b0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
232c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
232d0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
232e0 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
232f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
23300 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
23310 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
23320 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
23330 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
23340 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
23350 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
23360 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
23370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
23380 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
23390 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
233a0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
233b0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
233c0 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
233d0 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
233e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
233f0 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
23400 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
23410 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
23420 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
23430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
23440 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
23450 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
23460 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
23470 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
23480 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
23490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
234a0 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
234b0 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
234c0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
234d0 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
234e0 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
234f0 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
23500 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
23510 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
23520 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
23530 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
23540 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
23550 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
23560 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
23570 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
23580 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
23590 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
235a0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
235b0 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
235c0 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
235d0 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
235e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
235f0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
23600 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
23610 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
23620 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20  le);.#endif.u64 
23630 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
23640 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a  nt(LogEst);../*.
23650 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
23660 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
23670 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
23680 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
23690 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
236a0 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
236b0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
236c0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
236d0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
236e0 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68  * file.  Code sh
236f0 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43  ould use the MAC
23700 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20  RO forms below, 
23710 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32 20  as the Varint32 
23720 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20  versions.** are 
23730 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20  coded to assume 
23740 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20  the single byte 
23750 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79 20  case is already 
23760 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a  handled (which .
23770 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72  ** the MACRO for
23780 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20  m does)..*/.int 
23790 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
237a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
237b0 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u64);.int sqlit
237c0 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e  e3PutVarint32(un
237d0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33  signed char*, u3
237e0 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  2);.u8 sqlite3Ge
237f0 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
23800 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
23810 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
23820 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
23830 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
23840 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
23850 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
23860 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
23870 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61 20  The header of a 
23880 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20  record consists 
23890 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76 61  of a sequence va
238a0 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
238b0 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
238c0 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c   integers are al
238d0 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c  most always smal
238e0 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65  l and are encode
238f0 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  d as a single by
23900 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  te..** The follo
23910 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65  wing macros take
23920 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73 20   advantage this 
23930 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20  fact to provide 
23940 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a  a fast encode.**
23950 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74   and decode of t
23960 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61  he integers in a
23970 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20   record header. 
23980 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66 6f   It is faster fo
23990 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20  r the common.** 
239a0 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 69  case where the i
239b0 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e 67  nteger is a sing
239c0 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73 20  le byte.  It is 
239d0 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20  a little slower 
239e0 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65  when the.** inte
239f0 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f  ger is two or mo
23a00 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f  re bytes.  But o
23a10 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73  verall it is fas
23a20 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ter..**.** The f
23a30 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73  ollowing express
23a40 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c  ions are equival
23a50 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  ent:.**.**     x
23a60 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   = sqlite3GetVar
23a70 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a  int32( A, &B );.
23a80 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74  **     x = sqlit
23a90 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20 41  e3PutVarint32( A
23aa0 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20  , B );.**.**    
23ab0 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32   x = getVarint32
23ac0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20  ( A, B );.**    
23ad0 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   x = putVarint32
23ae0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a  ( A, B );.**.*/.
23af0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
23b00 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
23b10 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
23b20 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
23b30 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
23b40 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
23b50 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
23b60 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
23b70 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
23b80 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
23b90 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
23ba0 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
23bb0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
23bc0 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23  nt32((A),(B))).#
23bd0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
23be0 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
23bf0 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
23c00 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
23c10 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
23c20 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
23c30 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
23c40 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
23c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
23c60 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
23c70 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
23c80 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
23c90 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
23ca0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
23cb0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
23cc0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
23cd0 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
23ce0 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
23cf0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
23d00 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
23d10 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
23d20 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
23d30 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
23d40 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
23d50 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
23d60 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
23d70 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
23d80 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
23d90 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
23da0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  r*,...);.void *s
23db0 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
23dc0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
23dd0 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
23de0 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
23df0 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
23e00 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
23e10 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
23e20 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
23e30 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
23e40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
23e50 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  T) .const char *
23e60 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
23e70 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
23e80 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
23e90 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
23ea0 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
23eb0 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
23ec0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
23ed0 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
23ee0 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
23ef0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
23f00 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
23f10 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
23f20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
23f30 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
23f40 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
23f50 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
23f60 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
23f70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
23f80 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
23f90 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
23fa0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
23fb0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
23fc0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
23fd0 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
23fe0 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
23ff0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
24000 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
24010 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
24020 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
24030 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
24040 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
24050 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
24060 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
24070 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
24080 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
24090 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
240a0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
240b0 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
240c0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
240d0 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
240e0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
240f0 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
24100 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
24110 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
24120 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
24130 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
24140 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
24150 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
24160 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
24170 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
24180 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
24190 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
241a0 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
241b0 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
241c0 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
241d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
241e0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
241f0 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
24200 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
24210 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
24220 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
24230 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
24240 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
24250 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
24260 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  u8, .           
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
24280 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
24290 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
242a0 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76  etNull(sqlite3_v
242b0 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  alue*);.void sql
242c0 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
242d0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
242e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
242f0 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
24300 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a  lite3 *);.char *
24310 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
24320 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
24330 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
24340 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
24350 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
24360 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
24370 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
24380 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
24390 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
243a0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
243b0 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
243c0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
243d0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
243e0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
243f0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
24400 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
24410 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
24420 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
24430 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
24440 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
24450 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
24460 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d  qlite3CtypeMap[]
24470 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54  ;.extern const T
24480 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54  oken sqlite3IntT
24490 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20  okens[];.extern 
244a0 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63  SQLITE_WSD struc
244b0 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
244c0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65  sqlite3Config;.e
244d0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
244e0 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
244f0 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69  ite3GlobalFuncti
24500 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
24510 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
24520 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
24530 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
24540 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
24550 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
24560 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
24570 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
24580 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
24590 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
245a0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
245b0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
245c0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
245d0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
245e0 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
245f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
24600 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
24610 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
24620 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
24630 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
24640 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
24650 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
24660 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
24670 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
24680 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
24690 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
246a0 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
246b0 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70  ect(Parse *, Exp
246c0 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
246d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
246e0 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
246f0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
24700 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
24710 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
24720 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
24730 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
24740 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24750 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24760 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
24770 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
24780 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
24790 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
247a0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
247b0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
247c0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
247d0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
247e0 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
247f0 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
24800 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
24810 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
24820 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
24830 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
24840 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
24850 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24860 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
24870 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
24880 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
24890 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
248a0 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
248b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
248c0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
248d0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
248e0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
248f0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
24900 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61  te3GetCollSeq(Pa
24910 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65  rse*, u8, CollSe
24920 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  q *, const char*
24930 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41  );.char sqlite3A
24940 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73  ffinityType(cons
24950 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76  t char*, u8*);.v
24960 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
24970 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ze(Parse*, Token
24980 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
24990 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
249a0 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
249b0 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dler*);.int sqli
249c0 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
249d0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
249e0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
249f0 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
24a00 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
24a10 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
24a20 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
24a30 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
24a40 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
24a50 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
24a60 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
24a70 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
24a80 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
24a90 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
24aa0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
24ab0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
24ac0 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
24ad0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
24ae0 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
24af0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24b00 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61  MinimumFileForma
24b10 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
24b20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24b30 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
24b40 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
24b50 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
24b60 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
24b70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
24b80 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
24b90 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
24ba0 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
24bb0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
24bc0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
24bd0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24be0 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
24bf0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
24c00 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
24c10 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
24c20 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
24c30 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
24c40 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  rse*, Index*);.#
24c50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24c60 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
24c70 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
24c80 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
24c90 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
24ca0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
24cb0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
24cc0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
24cd0 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28   *, .  void (*)(
24ce0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
24cf0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
24d00 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
24d10 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
24d20 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
24d30 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20  value **), void 
24d40 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
24d50 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
24d60 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
24d70 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69  ctor.);.int sqli
24d80 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
24d90 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
24da0 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
24db0 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
24dc0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
24dd0 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
24de0 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20  rAccum*, char*, 
24df0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24e00 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
24e10 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
24e20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
24e30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
24e40 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
24e50 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
24e60 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
24e70 69 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28  ite3AppendSpace(
24e80 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a  StrAccum*,int);.
24e90 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
24ea0 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
24eb0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
24ec0 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
24ed0 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
24ee0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
24ef0 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
24f00 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
24f10 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
24f20 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
24f30 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
24f40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
24f50 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
24f60 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
24f70 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
24f80 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
24f90 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
24fa0 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
24fb0 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65  st u8 *);..#ifde
24fc0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24fd0 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76  STAT3_OR_STAT4.v
24fe0 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
24ff0 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  zeFunctions(void
25000 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
25010 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
25020 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55  (Parse*,Index*,U
25030 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
25040 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74  Expr*,u8,int,int
25050 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
25060 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
25070 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
25080 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
25090 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
250a0 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
250b0 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
250c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
250d0 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
250e0 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
250f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
25100 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65  te3_value**);.#e
25110 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25120 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
25130 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
25140 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20   parser.*/.void 
25150 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c  *sqlite3ParserAl
25160 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a  loc(void*(*)(siz
25170 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e_t));.void sqli
25180 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
25190 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
251a0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
251b0 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
251c0 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
251d0 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
251e0 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
251f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
25200 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
25210 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
25220 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
25230 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
25240 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
25250 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
25260 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
25270 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
25280 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
25290 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
252a0 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
252b0 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
252c0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
252d0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
252e0 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
252f0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
25300 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
25310 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
25320 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
25330 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
25340 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
25350 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
25360 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
25370 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
25380 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
25390 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
253a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
253b0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
253c0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
253d0 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
253e0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
253f0 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
25400 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25410 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
25420 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
25430 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
25440 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25450 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
25460 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
25470 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a  te3VtabLock(X) .
25480 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25490 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
254a0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
254b0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
254c0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
254d0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
254e0 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
254f0 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
25500 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
25510 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
25520 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
25530 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
25540 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
25550 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
25560 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
25570 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
25580 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
25590 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
255a0 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
255b0 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
255c0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
255d0 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
255e0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
255f0 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
25600 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
25610 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
25620 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
25630 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
25640 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
25650 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
25660 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
25670 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
25680 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
25690 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
256a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
256b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
256c0 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
256d0 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
256e0 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
256f0 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
25700 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
25710 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
25720 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
25730 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
25740 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
25750 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76  ans==0).#endif.v
25760 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
25770 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
25780 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
25790 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
257a0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
257b0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
257c0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
257d0 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
257e0 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
257f0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
25800 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
25810 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
25820 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
25830 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
25840 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
25850 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
25860 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
25870 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
25880 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
25890 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
258a0 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
258b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
258c0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
258d0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
258e0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
258f0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
25900 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
25910 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
25920 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
25930 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
25940 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
25950 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
25960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
25970 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
25980 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
25990 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
259a0 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
259b0 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
259c0 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
259d0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
259e0 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
259f0 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
25a00 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
25a10 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25a20 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
25a30 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
25a40 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
25a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
25a60 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
25a70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
25a80 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
25a90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25aa0 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
25ab0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
25ac0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
25ad0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
25ae0 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
25af0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
25b00 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
25b10 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
25b20 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
25b30 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
25b40 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
25b50 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
25b60 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
25b70 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
25b80 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
25b90 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
25ba0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
25bb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25bc0 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
25bd0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
25be0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
25bf0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
25c00 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
25c10 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
25c20 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
25c30 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
25c40 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
25c50 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
25c60 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
25c70 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
25c80 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
25c90 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
25ca0 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
25cb0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
25cc0 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
25cd0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
25ce0 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
25cf0 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
25d00 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
25d10 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
25d20 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
25d30 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
25d40 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
25d50 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
25d60 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
25d70 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
25d80 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
25d90 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
25da0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
25db0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
25dc0 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
25dd0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
25de0 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
25df0 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
25e00 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
25e10 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
25e20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
25e30 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
25e40 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
25e50 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
25e60 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
25e70 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
25e80 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
25e90 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
25ea0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25eb0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
25ec0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
25ed0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
25ee0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
25ef0 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
25f00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
25f10 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
25f20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
25f30 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
25f40 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
25f50 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
25f60 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
25f70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
25f80 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
25f90 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
25fa0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
25fb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
25fc0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
25fd0 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
25fe0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
25ff0 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
26000 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
26010 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
26020 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26030 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
26040 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
26050 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
26060 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
26070 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26080 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
26090 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
260a0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
260b0 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
260c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
260d0 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
260e0 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69  )    0.#endif.#i
260f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26100 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
26110 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
26120 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
26130 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
26140 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
26150 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
26160 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
26170 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
26180 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26190 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
261a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
261b0 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
261c0 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
261d0 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
261e0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
261f0 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
26200 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
26210 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
26220 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
26230 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
26240 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
26250 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
26260 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
26270 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
26280 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
26290 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
262a0 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
262b0 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
262c0 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
262d0 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
262e0 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
262f0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20  BUILTIN_TEST.** 
26300 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
26310 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
26320 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
26330 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
26340 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
26350 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
26360 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
26370 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
26380 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
26390 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
263a0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
263b0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
263c0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
263d0 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e  ndif..#define IN
263e0 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
263f0 20 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65         1.#define
26400 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20   IN_INDEX_EPH   
26410 20 20 20 20 20 20 20 20 20 20 32 0a 23 64 65 66            2.#def
26420 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
26430 45 58 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23  EX_ASC       3.#
26440 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
26450 49 4e 44 45 58 5f 44 45 53 43 20 20 20 20 20 20  INDEX_DESC      
26460 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  4.int sqlite3Fin
26470 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
26480 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b  , Expr *, int*);
26490 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
264a0 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
264b0 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
264c0 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
264d0 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
264e0 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
264f0 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
26500 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
26510 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
26520 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20  lite3_vfs *);.  
26530 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
26540 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
26550 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20  _file *);.  int 
26560 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
26570 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c  ists(sqlite3_fil
26580 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23  e *p);.#else.  #
26590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
265a0 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20  urnalSize(pVfs) 
265b0 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c  ((pVfs)->szOsFil
265c0 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  e).  #define sql
265d0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
265e0 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76  s(p) 1.#endif..v
265f0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
26600 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
26610 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73  3_file *);.int s
26620 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
26630 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20  Size(void);.int 
26640 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72  sqlite3IsMemJour
26650 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  nal(sqlite3_file
26660 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45   *);..#if SQLITE
26670 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
26680 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  0.  void sqlite3
26690 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50 61  ExprSetHeight(Pa
266a0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
266b0 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c  r *p);.  int sql
266c0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
266d0 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
266e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
266f0 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
26700 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
26710 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26720 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
26730 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
26740 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
26750 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
26760 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
26770 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
26780 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
26790 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
267a0 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
267b0 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
267c0 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
267d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
267e0 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
267f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
26800 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
26810 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
26820 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
26830 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
26840 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
26850 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
26860 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
26870 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
26880 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
26890 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
268a0 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
268b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
268c0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
268d0 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
268e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
268f0 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
26900 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
26910 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
26920 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
26930 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
26940 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
26950 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
26960 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
26970 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
26980 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
26990 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
269a0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
269b0 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
269c0 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
269d0 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
269e0 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23   messages. .*/.#
269f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26a00 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
26a10 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
26a20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
26a30 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
26a40 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
26a50 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
26a60 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
26a70 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
26a80 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72  id (*sqlite3IoTr
26a90 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
26aa0 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
26ab0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
26ac0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26ad0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
26ae0 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
26af0 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
26b00 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
26b10 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
26b20 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
26b30 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
26b40 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
26b50 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
26b60 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
26b70 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
26b80 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
26b90 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
26ba0 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
26bb0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
26bc0 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
26bd0 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
26be0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
26bf0 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
26c00 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
26c10 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
26c20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
26c30 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
26c40 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
26c50 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
26c60 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
26c70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
26c80 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
26c90 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
26ca0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
26cb0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
26cc0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
26cd0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26ce0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
26cf0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
26d00 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
26d10 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
26d20 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
26d30 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
26d40 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
26d50 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
26d60 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
26d70 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
26d80 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
26d90 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
26da0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
26db0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
26dc0 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
26dd0 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
26de0 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
26df0 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
26e00 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
26e10 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
26e20 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
26e30 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
26e40 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
26e50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
26e60 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
26e70 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
26e80 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
26e90 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
26ea0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
26eb0 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
26ec0 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
26ed0 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
26ee0 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
26ef0 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
26f00 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
26f10 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
26f20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
26f30 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
26f40 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
26f50 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
26f60 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
26f70 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
26f80 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
26f90 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
26fa0 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
26fb0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
26fc0 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
26fd0 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
26fe0 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  nt. .**.** All o
26ff0 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
27000 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
27010 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
27020 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
27030 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
27040 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
27050 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
27060 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
27070 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
27080 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
27090 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
270a0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
270b0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
270c0 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
270d0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
270e0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
270f0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
27100 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27110 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
27120 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
27130 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
27140 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
27150 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
27160 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
27170 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
27180 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
27190 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
271a0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
271b0 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
271c0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
271d0 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
271e0 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d  SIDE  0x02  /* M
271f0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
27200 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20  ookaside memory 
27210 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
27220 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
27230 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
27240 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
27250 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
27260 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
27270 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
27280 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
27290 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20  ine MEMTYPE_DB  
272a0 20 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20         0x10  /* 
272b0 55 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61  Uses sqlite3DbMa
272c0 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65  lloc, not sqlite
272d0 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64  _malloc */..#end
272e0 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54  if /* _SQLITEINT
272f0 5f 48 5f 20 2a 2f 0a                             _H_ */.