/ Hex Artifact Content
Login

Artifact cf62c8e9af197a3962d121230daade650e478f9a:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
16b0: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
16c0: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
16d0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
16e0: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
16f0: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1700: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1710: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1720: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1730: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1740: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1750: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1760: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1770: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1780: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1790: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
17a0: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
17b0: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
17c0: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
17d0: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
17e0: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
17f0: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1800: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1810: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1820: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1830: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1840: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1850: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1860: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1870: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1880: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1890: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
18a0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
18b0: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
18c0: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
18d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
18e0: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
18f0: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1910: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1920: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1930: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1940: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1950: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1960: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1970: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1980: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1990: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
19a0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
19b0: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
19c0: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
19d0: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
19e0: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
19f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1a00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1a10: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1a20: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45  ** The SQLITE_DE
1a30: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
1a40: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1a50: 66 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20  fined as either 
1a60: 30 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65  0 or 1..** It de
1a70: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
1a80: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74   or not the feat
1a90: 75 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  ures related to 
1aa0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  .** SQLITE_CONFI
1ab0: 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20  G_MEMSTATUS are 
1ac0: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ad0: 61 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69  ault or not. Thi
1ae0: 73 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62  s value can.** b
1af0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  e overridden at 
1b00: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
1b10: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  e sqlite3_config
1b20: 28 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21  () API..*/.#if !
1b30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b40: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1b50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b60: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1b70: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1b80: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1b90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba0: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1bb0: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1bc0: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1bd0: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1be0: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1bf0: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1c00: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1c10: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1c20: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1c30: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1c40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1c50: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1c60: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1c70: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1c80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1c90: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1ca0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1cb0: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1cc0: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1cd0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1ce0: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1cf0: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1d00: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1d10: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1d20: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1d30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1d40: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1d50: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1d60: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1d70: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1d80: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1d90: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
1da0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
1db0: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
1dc0: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
1dd0: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
1de0: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
1df0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
1e00: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
1e10: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
1e20: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
1e30: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1e40: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1e50: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1e60: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1e70: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1e80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1e90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1ea0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1eb0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
1ec0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1ed0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
1ee0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1ef0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1f00: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1f10: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1f40: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1f50: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1f60: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1f70: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1f80: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1f90: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
1fa0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
1fb0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
1fc0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
1fd0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1fe0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1ff0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2010: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2020: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2030: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2040: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2050: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
2060: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2070: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
2080: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2090: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
20a0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
20b0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
20c0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
20d0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
20e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
20f0: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2100: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2110: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2120: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2130: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
2140: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2150: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
2160: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
2170: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
2180: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
2190: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
21a0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
21b0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
21c0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
21d0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
21e0: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
21f0: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2200: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2210: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2220: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2230: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
2240: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
2250: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
2260: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
2270: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
2280: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
2290: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
22a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
22b0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
22c0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
22d0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
22e0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
22f0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2300: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2310: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2320: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2330: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
2340: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
2350: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
2360: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
2370: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
2380: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
2390: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
23a0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
23b0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
23c0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23d0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
23e0: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
23f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2400: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2410: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2420: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2430: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
2440: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
2450: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
2460: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
2470: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
2480: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
2490: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
24a0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
24b0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
24d0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
24e0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24f0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2500: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2510: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2520: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2530: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2540: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2550: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2560: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2570: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2580: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2590: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
25a0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
25c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
25d0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
25e0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
25f0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2600: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2610: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2620: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2630: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
2640: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2650: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2660: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2670: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2680: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2690: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
26a0: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
26b0: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
26c0: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
26d0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
26e0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
26f0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2700: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2710: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2720: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2730: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2740: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2750: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2760: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2770: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2780: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2790: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
27a0: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
27b0: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
27c0: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
27d0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
27e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
27f0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2800: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2810: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2820: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2830: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2840: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2850: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2860: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2870: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2880: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2890: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
28a0: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
28b0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
28c0: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28d0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
28e0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
28f0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2900: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2910: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2920: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2930: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2940: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2950: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2960: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2970: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2980: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2990: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
29a0: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
29b0: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
29c0: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
29d0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
29e0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
29f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2a00: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2a10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2a20: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2a30: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2a40: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2a50: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2a60: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2a70: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2a80: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2a90: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2aa0: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2ab0: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2ac0: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2ad0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2ae0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2af0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2b00: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2b10: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2b20: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2b30: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2b40: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2b50: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2b60: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2b70: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2b80: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2b90: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2ba0: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2bb0: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2bc0: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2bd0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2be0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2bf0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2c00: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2c10: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2c20: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2c30: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2c40: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2c50: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2c60: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2c70: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2c80: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2c90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2ca0: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2cb0: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2cc0: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2cd0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ce0: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2cf0: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2d00: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2d10: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2d20: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2d30: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2d40: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2d50: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2d60: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2d70: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2d80: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2d90: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
2da0: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
2db0: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
2dc0: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
2dd0: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
2de0: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
2df0: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
2e00: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
2e10: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
2e20: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
2e30: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
2e40: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
2e50: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
2e60: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
2e70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
2e80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2e90: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
2ea0: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
2eb0: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
2ec0: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
2ed0: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
2ee0: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
2ef0: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
2f00: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
2f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2f20: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2f30: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2f40: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
2f50: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
2f60: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
2f70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
2f80: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
2f90: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
2fa0: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
2fb0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2fc0: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
2fd0: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
2fe0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2ff0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3000: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3010: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3020: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3030: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
3040: 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e  he input is a in
3050: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
3060: 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69  o large.** to fi
3070: 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54  t in 32-bits.  T
3080: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
3090: 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69  d inside of vari
30a0: 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a  ous testcase().*
30b0: 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69  * macros to veri
30c0: 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20  fy that we have 
30d0: 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f  tested SQLite fo
30e0: 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70  r large-file sup
30f0: 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  port..*/.#define
3100: 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20   IS_BIG_INT(X)  
3110: 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66  (((X)&~(i64)0xff
3120: 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a  ffffff)!=0)../*.
3130: 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c  ** The macro unl
3140: 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e  ikely() is a hin
3150: 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73  t that surrounds
3160: 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78   a boolean.** ex
3170: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3180: 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20   usually false. 
3190: 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20   Macro likely() 
31a0: 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62  surrounds.** a b
31b0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
31c0: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
31d0: 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68  y true.  These h
31e0: 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69  ints could,.** i
31f0: 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65  n theory, be use
3200: 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  d by the compile
3210: 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65  r to generate be
3220: 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a  tter code, but.*
3230: 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79  * currently they
3240: 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e   are just commen
3250: 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61  ts for human rea
3260: 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ders..*/.#define
3270: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58   likely(X)    (X
3280: 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  ).#define unlike
3290: 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63  ly(X)  (X)..#inc
32a0: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
32b0: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
32c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
32d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
32e0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
32f0: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
3300: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
3310: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
3320: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
3330: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
3340: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
3350: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
3360: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
3370: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
3380: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
3390: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
33a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
33b0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
33c0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
33d0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
33e0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
33f0: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
3410: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
3420: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3430: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
3440: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
3450: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
3460: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
3470: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3480: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
3490: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
34a0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
34b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
34c0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
34d0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
34e0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
34f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3500: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3520: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
3530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
3540: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
3550: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
3560: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
3570: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
3580: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
3590: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
35a0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
35b0: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
35c0: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
35d0: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
35e0: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
35f0: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
3600: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
3610: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
3620: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
3630: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
3640: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3650: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3660: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
3670: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
3680: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
3690: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
36a0: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
36b0: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
36c0: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
36e0: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
36f0: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
3700: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
3710: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
3720: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
3730: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
3740: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
3750: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
3760: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
3770: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
3780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3790: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
37a0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
37b0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
37c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
37d0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
37e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
37f0: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
3800: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
3810: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
3820: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
3830: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
3840: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3850: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
3860: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3880: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
3890: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
38a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
38b0: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
38c0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
38d0: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
38e0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
38f0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
3900: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
3910: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3930: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
3940: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
3950: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
3960: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
3970: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
3980: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3990: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
39a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
39b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
39c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
39d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
39e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
39f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3a00: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3a10: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3a20: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
3a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
3a40: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
3a50: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
3a60: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
3a70: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rs..*/.#define M
3a80: 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29  IN(A,B) ((A)<(B)
3a90: 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e  ?(A):(B)).#defin
3aa0: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
3ab0: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a  (B)?(A):(B))../*
3ac0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ad0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
3ae0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
3af0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
3b00: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
3b10: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
3b20: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
3b30: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
3b40: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
3b50: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
3b60: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
3b70: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
3b80: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
3b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
3ba0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
3bb0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
3bc0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
3bd0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
3be0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
3bf0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
3c00: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
3c10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
3c20: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
3c30: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
3c40: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
3c50: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
3c60: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
3c70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
3c80: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
3c90: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
3ca0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
3cb0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
3cc0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
3cd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
3ce0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
3cf0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3d00: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
3d10: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
3d20: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3d30: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
3d40: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
3d50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3d60: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
3d70: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3d80: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
3d90: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
3da0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3db0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
3dc0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
3dd0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3de0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
3df0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
3e00: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3e10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3e20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
3e30: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
3e40: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
3e50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3e60: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
3e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e80: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
3e90: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
3ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
3eb0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3ec0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
3ed0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
3ee0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
3ef0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
3f00: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
3f10: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3f20: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
3f30: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
3f40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
3f50: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
3f60: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
3f70: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
3f80: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
3f90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3fa0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3fb0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
3fc0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
3fd0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3fe0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
3ff0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4000: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4010: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4020: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4030: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4040: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4050: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4060: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4070: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
4080: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
4090: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
40a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
40b0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
40c0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
40d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
40e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
40f0: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4100: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4120: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4130: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4140: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4150: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4160: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4170: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
4180: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
4190: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
41a0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
41b0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
41c0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
41d0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
41e0: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
41f0: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4200: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4210: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4220: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4240: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4250: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4260: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4270: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
4280: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
42a0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
42b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
42c0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
42d0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
42e0: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
42f0: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4300: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4310: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4320: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4330: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4340: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4350: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4360: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4370: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
4380: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
4390: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
43a0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
43b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
43c0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
43d0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
43e0: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
43f0: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4400: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4410: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4420: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4430: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4440: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4450: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4460: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4470: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
4480: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
4490: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
44a0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
44b0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
44c0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
44d0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
44e0: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
44f0: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4500: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4510: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4520: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4530: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4540: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4550: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4560: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4570: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4580: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74  e LogEst quantat
4590: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
45a0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
45b0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
45c0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
45d0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
45e0: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
45f0: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4600: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4610: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4620: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4630: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4640: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4650: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4660: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4670: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4680: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4690: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
46a0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
46b0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
46c0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
46d0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
46e0: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
46f0: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4700: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4710: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4720: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4730: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4740: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4750: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4760: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4770: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4780: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4790: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
47a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
47b0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
47c0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
47d0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
47e0: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
47f0: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4800: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
4810: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
4820: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
4830: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
4840: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
4850: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
4860: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
4870: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
4880: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
4890: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
48a0: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
48b0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
48c0: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
48d0: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
48e0: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
48f0: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
4900: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
4910: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
4920: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4930: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
4940: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
4950: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
4960: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
4970: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4980: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4990: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
49a0: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
49b0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
49c0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
49d0: 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29  f (defined(i386)
49e0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
49f0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
4a00: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
4a10: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
4a20: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
4a30: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
4a40: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
4a50: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
4a60: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
4a70: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
4a80: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
4a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
4aa0: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
4ab0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
4ac0: 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  )) && !defined(S
4ad0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
4ae0: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
4af0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
4b00: 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66  ER    1234.# def
4b10: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
4b20: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
4b30: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
4b40: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
4b50: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
4b60: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
4b70: 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16LE.#endif.#if 
4b80: 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20  (defined(sparc) 
4b90: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4ba0: 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26  ppc__))  \.    &
4bb0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
4bc0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4bd0: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
4be0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
4bf0: 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20    4321.# define 
4c00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4c10: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
4c20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
4c30: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
4c40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4c50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
4c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45  ined(SQLITE_BYTE
4c80: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
4c90: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
4ca0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d      0     /* 0 m
4cb0: 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74  eans "unknown at
4cc0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a   compile-time" *
4cd0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
4ce0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
4cf0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
4d00: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
4d10: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
4d20: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
4d30: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
4d40: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
4d50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4d60: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4d70: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4d80: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4d90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4da0: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4db0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4dc0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4dd0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4de0: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4df0: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
4e00: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
4e10: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
4e20: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
4e30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
4e40: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
4e50: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4e60: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4e70: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4e80: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4e90: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4ea0: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4eb0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4ec0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4ed0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4ee0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4ef0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
4f00: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
4f10: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
4f20: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
4f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4f40: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
4f50: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4f60: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4f70: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4f80: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4f90: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4fa0: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4fb0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4fc0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4fd0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4fe0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4ff0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
5000: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
5010: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
5020: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
5030: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
5040: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
5050: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
5060: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
5070: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
5080: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
5090: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
50a0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
50b0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
50c0: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
50d0: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
50e0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
50f0: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
5100: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
5110: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
5120: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
5130: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5140: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
5150: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
5160: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
5170: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
5180: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
5190: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
51a0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
51b0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
51c0: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
51d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
51e0: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
51f0: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
5200: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
5210: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
5220: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
5230: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
5240: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
5250: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5260: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
5270: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5280: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
5290: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
52a0: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
52b0: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
52c0: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
52d0: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
52e0: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
52f0: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
5300: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
5310: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
5320: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
5330: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5340: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
5350: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5360: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
5370: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
5380: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
5390: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
53a0: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
53b0: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
53c0: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
53d0: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
53e0: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
53f0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
5400: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
5410: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5420: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
5430: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
5440: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
5450: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5460: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
5470: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
5480: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5490: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
54a0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
54b0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
54c0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
54d0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
54e0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
54f0: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
5500: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
5510: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
5520: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
5530: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
5540: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
5550: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
5560: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
5570: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
5580: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5590: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
55c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
55d0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
55e0: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
55f0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5600: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
5610: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5620: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
5630: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
5640: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5650: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
5660: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5670: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
5680: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
56a0: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
56b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
56c0: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
56d0: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
56e0: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
56f0: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
5700: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5710: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
5720: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
5730: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
5740: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5750: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
5760: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5770: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
5780: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5790: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
57a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
57b0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
57c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
57d0: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
57e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
57f0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
5800: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5810: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
5820: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
5830: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5840: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
5850: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5870: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5880: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5890: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
58a0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
58b0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
58c0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
58d0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
58e0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
58f0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5900: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5910: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5920: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5930: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5940: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5950: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5960: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5970: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5980: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5990: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
59a0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
59b0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
59c0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
59d0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
59e0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
59f0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5a00: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5a10: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5a20: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5a30: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5a40: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5a50: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5a60: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5a70: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5a80: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5a90: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5aa0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5ab0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5ac0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5ad0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5ae0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5af0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5b00: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5b10: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
5b20: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
5b30: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
5b40: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
5b50: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5b60: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5b70: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5b80: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5b90: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5ba0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5bb0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5bc0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5bd0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5be0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5bf0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
5c00: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
5c10: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
5c20: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
5c30: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
5c40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
5c50: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5c60: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5c70: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5c80: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5c90: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5ca0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5cb0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5cc0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5cd0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5ce0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5cf0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
5d00: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
5d10: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
5d20: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
5d30: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
5d40: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
5d50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5d60: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5d70: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5d80: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5d90: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5da0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5db0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5dc0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5dd0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5de0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5df0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
5e00: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
5e10: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
5e20: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
5e30: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
5e40: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
5e50: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5e60: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5e70: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5e80: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5e90: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5ea0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5eb0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5ec0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5ed0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5ee0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5ef0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
5f00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5f10: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
5f20: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
5f30: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
5f40: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
5f50: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5f60: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5f70: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5f80: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5f90: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5fa0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5fb0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5fc0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5fd0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5fe0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5ff0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6000: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6010: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6020: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6030: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6040: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6050: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6060: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6070: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6080: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6090: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
60a0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
60b0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
60c0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
60d0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
60e0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
60f0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
6100: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
6110: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6120: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6130: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6140: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6150: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6160: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6170: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6180: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6190: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
61a0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
61b0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
61c0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
61d0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
61e0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
61f0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
6200: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
6210: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6220: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6230: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6240: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6250: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6260: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6280: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6290: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
62a0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
62b0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
62c0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
62d0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
62e0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
62f0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
6300: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
6310: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6320: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6330: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6340: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6350: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6360: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6370: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6380: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6390: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
63a0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
63b0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
63c0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
63d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
63e0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
63f0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
6400: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
6410: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6420: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6430: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6440: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6450: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6460: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6470: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6480: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6490: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
64a0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
64b0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
64c0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
64d0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
64e0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
64f0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
6500: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
6510: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6520: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6530: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6540: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6550: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6560: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6570: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6580: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6590: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
65a0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
65b0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
65c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
65d0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
65e0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
65f0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6600: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6610: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6620: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6630: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6640: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6650: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6660: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6670: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6680: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6690: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
66a0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
66b0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
66c0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
66d0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
66e0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
66f0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6700: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6710: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6720: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6730: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6740: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6750: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6760: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6770: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6780: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6790: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
67a0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
67b0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
67c0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
67d0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
67e0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
67f0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6800: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6810: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6820: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6830: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6840: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6850: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6860: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6870: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6880: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6890: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
68a0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
68b0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
68c0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
68d0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
68e0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
68f0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6900: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6910: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6920: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6930: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6940: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6950: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6960: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6970: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6980: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
69a0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
69b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69c0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
69d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
69e0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
69f0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6a00: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6a10: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6a20: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6a40: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6a50: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6a60: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6a70: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6a80: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6a90: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6aa0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6ab0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6ac0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6ad0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6ae0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6af0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6b00: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6b10: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
6b20: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
6b30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6b40: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
6b50: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
6b60: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
6b70: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
6b80: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6b90: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6ba0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6bb0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6bc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6bd0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6be0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6bf0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
6c00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c10: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
6c20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6c30: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
6c40: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
6c50: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
6c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c70: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
6c80: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6c90: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6ca0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cb0: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6cc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cd0: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6ce0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6cf0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
6d00: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
6d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
6d20: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
6d30: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
6d40: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
6d50: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
6d60: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
6d70: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
6d80: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6d90: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6da0: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6db0: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
6dc0: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
6dd0: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
6de0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
6df0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
6e00: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
6e10: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
6e20: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
6e30: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
6e40: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
6e50: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
6e60: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
6e70: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
6e80: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
6e90: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
6ea0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
6eb0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
6ec0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
6ed0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
6ee0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
6ef0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
6f00: 0a 2f 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 61  ./* When using a
6f10: 20 64 65 66 61 75 6c 74 20 77 61 6c 20 73 61 66   default wal saf
6f20: 65 74 79 20 6c 65 76 65 6c 2c 20 74 68 65 20 73  ety level, the s
6f30: 61 66 65 74 79 20 6c 65 76 65 6c 20 73 68 6f 75  afety level shou
6f40: 6c 64 20 6f 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e  ld only .** chan
6f50: 67 65 20 77 69 74 68 20 74 68 65 20 6a 6f 75 72  ge with the jour
6f60: 6e 61 6c 20 6d 6f 64 65 20 69 66 20 74 68 65 20  nal mode if the 
6f70: 75 73 65 72 20 68 61 73 6e 27 74 20 6d 61 6e 75  user hasn't manu
6f80: 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20 0a  ally specified .
6f90: 2a 2a 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72  ** pragma synchr
6fa0: 6f 6e 6f 75 73 2c 20 69 66 20 74 68 65 79 20 68  onous, if they h
6fb0: 61 76 65 20 74 68 65 20 64 65 66 61 75 6c 74 73  ave the defaults
6fc0: 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20 61 70   shouldn't be ap
6fd0: 70 6c 69 65 64 2e 0a 2a 2a 20 54 68 65 20 53 51  plied..** The SQ
6fe0: 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c  LITE_SAFETYLEVEL
6ff0: 5f 46 49 58 45 44 20 76 61 6c 75 65 20 69 73 20  _FIXED value is 
7000: 4f 52 65 64 20 69 6e 74 6f 20 74 68 65 20 44 62  ORed into the Db
7010: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 2a  ->safety_level.*
7020: 2a 20 66 69 65 6c 64 20 77 68 65 6e 20 74 68 65  * field when the
7030: 20 75 73 65 72 20 68 61 73 20 73 70 65 63 69 66   user has specif
7040: 69 65 64 20 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ied a synchronou
7050: 73 20 73 65 74 74 69 6e 67 20 76 69 61 20 70 72  s setting via pr
7060: 61 67 6d 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  agma..*/.#define
7070: 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45   SQLITE_SAFETYLE
7080: 56 45 4c 5f 46 49 58 45 44 20 30 78 31 30 0a 23  VEL_FIXED 0x10.#
7090: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 41  define SQLITE_SA
70a0: 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f  FETYLEVEL_VALUE_
70b0: 4d 41 53 4b 20 30 78 30 33 0a 23 64 65 66 69 6e  MASK 0x03.#defin
70c0: 65 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74  e SQLITE_DbSafet
70d0: 79 4c 65 76 65 6c 56 61 6c 75 65 28 6c 65 76 65  yLevelValue(leve
70e0: 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54 45  l) (level&SQLITE
70f0: 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c  _SAFETYLEVEL_VAL
7100: 55 45 5f 4d 41 53 4b 29 0a 23 64 65 66 69 6e 65  UE_MASK).#define
7110: 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79   SQLITE_DbSafety
7120: 4c 65 76 65 6c 49 73 46 69 78 65 64 28 6c 65 76  LevelIsFixed(lev
7130: 65 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54  el) (level&SQLIT
7140: 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49  E_SAFETYLEVEL_FI
7150: 58 45 44 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  XED)../*.** Each
7160: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
7170: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
7180: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
7190: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
71a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
71b0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
71c0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
71d0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
71e0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
71f0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7200: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7210: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7220: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
7230: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
7240: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
7250: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
7260: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
7270: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7280: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
7290: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
72a0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
72b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
72c0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
72d0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
72e0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
72f0: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7300: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7310: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
7320: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
7330: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
7340: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
7350: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
7360: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
7370: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7380: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
7390: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
73a0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
73b0: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
73c0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
73d0: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
73e0: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
73f0: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7400: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7410: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
7420: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
7430: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
7440: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
7450: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
7460: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
7470: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7480: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
7490: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
74a0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
74b0: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
74c0: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
74d0: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
74e0: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
74f0: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7500: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7510: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
7520: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
7530: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
7540: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
7550: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
7560: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
7570: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7580: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
7590: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
75a0: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
75b0: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
75c0: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
75d0: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
75e0: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
75f0: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7600: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7610: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
7620: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
7630: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
7640: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
7650: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7660: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
7670: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7680: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
7690: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
76a0: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
76b0: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
76c0: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
76d0: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
76e0: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
76f0: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7700: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7710: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
7720: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
7730: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
7740: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
7750: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
7760: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7770: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7780: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
7790: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
77a0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
77b0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
77c0: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
77d0: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
77e0: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
77f0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7800: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7810: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7820: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7830: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7840: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7850: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7860: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7870: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7880: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
7890: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
78a0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
78b0: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
78c0: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
78d0: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
78e0: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
78f0: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7900: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7910: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7920: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7930: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7940: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7950: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
7960: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7970: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7980: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7990: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
79a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
79b0: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
79c0: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
79d0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
79e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
79f0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7a00: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7a10: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7a20: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7a30: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7a40: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7a50: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7a60: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
7a70: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
7a80: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
7a90: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
7aa0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7ab0: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
7ac0: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
7ad0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7ae0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
7af0: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
7b00: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
7b10: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
7b20: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
7b30: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
7b40: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
7b50: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
7b60: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
7b70: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
7b80: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
7b90: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
7ba0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
7bb0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
7bc0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
7bd0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
7be0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
7bf0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
7c00: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
7c10: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
7c20: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
7c30: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
7c40: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
7c50: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
7c60: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
7c70: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
7c80: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
7c90: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
7ca0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
7cb0: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
7cc0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
7cd0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
7ce0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
7cf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
7d00: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
7d10: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
7d20: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
7d30: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
7d40: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
7d50: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
7d60: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
7d70: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
7d80: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
7d90: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
7da0: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
7db0: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
7dc0: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
7dd0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
7de0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
7df0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
7e00: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
7e10: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
7e20: 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29  TRIGGER_DEPTH+1)
7e30: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
7e40: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
7e50: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
7e60: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
7e70: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
7e80: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
7e90: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
7ea0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
7eb0: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
7ec0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7ed0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
7ee0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7ef0: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
7f00: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
7f10: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
7f20: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
7f30: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
7f40: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
7f50: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
7f60: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
7f70: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
7f80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
7f90: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
7fa0: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
7fb0: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
7fc0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
7fd0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
7fe0: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
7ff0: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
8000: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
8010: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
8020: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
8030: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
8040: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
8050: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
8060: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
8070: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
8080: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
8090: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
80a0: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
80b0: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
80c0: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
80d0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
80e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
80f0: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
8100: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
8110: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
8120: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
8130: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
8140: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
8150: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8160: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
8170: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
8180: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
8190: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
81a0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
81b0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
81c0: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
81d0: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
81e0: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
81f0: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
8200: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
8210: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
8220: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
8230: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
8240: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
8250: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
8260: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
8270: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
8280: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
8290: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
82a0: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
82b0: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
82c0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
82d0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
82e0: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
82f0: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
8300: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
8310: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
8320: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8340: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
8350: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
8360: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
8370: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
8380: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
8390: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
83a0: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61  t */.  int anSta
83b0: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
83c0: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
83d0: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
83e0: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
83f0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
8400: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
8410: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
8420: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
8430: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
8440: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
8450: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
8460: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
8470: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
8480: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8490: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
84a0: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
84b0: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
84c0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
84d0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
84e0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
84f0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
8500: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
8510: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
8520: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
8530: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  or function defi
8540: 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48  nitions..**.** H
8550: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
8560: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
8570: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
8580: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
8590: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
85a0: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
85b0: 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  ef.pHash chain..
85c0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
85d0: 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65  fHash {.  FuncDe
85e0: 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20  f *a[23];       
85f0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
8600: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
8610: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  ;../*.** Each da
8620: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8630: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
8640: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8650: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
8660: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
8670: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
8680: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
8690: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
86a0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
86b0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
86c0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
86d0: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
86e0: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
86f0: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
8700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
8710: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
8720: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
8730: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
8740: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
8750: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
8760: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
8770: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8790: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
87a0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
87d0: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
87e0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
87f0: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
8800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
8810: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
8820: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
8830: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
8840: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8850: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
8860: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
8870: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
8880: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
88a0: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
88b0: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
88c0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
88d0: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
88e0: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
88f0: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
8900: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
8910: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
8920: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8930: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
8940: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
8950: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
8960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8970: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
8980: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
8990: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
89a0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
89b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
89c0: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
89d0: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
89e0: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
89f0: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8a10: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
8a20: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
8a30: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
8a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
8a50: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
8a60: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
8a70: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8a90: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
8aa0: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
8ab0: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
8ac0: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
8ad0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
8ae0: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
8af0: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
8b00: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
8b10: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
8b20: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
8b30: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
8b40: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
8b50: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8b70: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
8b80: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
8b90: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
8ba0: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
8bb0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
8bc0: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
8bd0: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
8be0: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
8bf0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
8c00: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
8c10: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
8c20: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
8c30: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
8c40: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
8c50: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
8c60: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
8c70: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
8c80: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
8c90: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
8ca0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
8cb0: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
8cc0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
8cd0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
8ce0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
8cf0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
8d00: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
8d10: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
8d20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
8d30: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
8d40: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
8d50: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
8d60: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
8d70: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
8d80: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74  * Limits */.  st
8d90: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
8da0: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
8db0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
8dc0: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
8dd0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
8de0: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
8df0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
8e00: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
8e10: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
8e20: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
8e50: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
8e60: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
8e70: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8e90: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
8ea0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
8eb0: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
8ec0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
8ed0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
8ee0: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
8ef0: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
8f00: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
8f10: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
8f20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8f30: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
8f40: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
8f50: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
8f60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8f70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8f80: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8f90: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
8fa0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
8fb0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8fc0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8fd0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8fe0: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
8ff0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
9000: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9010: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
9020: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
9030: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
9040: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9060: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
9070: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
9080: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
9090: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
90a0: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
90b0: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
90c0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
90d0: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
90e0: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
90f0: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
9100: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
9110: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
9140: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
9150: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
9160: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
9170: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
9180: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
9190: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
91a0: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
91d0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
91e0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
91f0: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9210: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
9220: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
9230: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
9240: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
9250: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
9260: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
9270: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
9280: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
92b0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
92c0: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
92d0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
92e0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
92f0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
9300: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
9310: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
9320: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
9330: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
9340: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
9350: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
9360: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66  _int64);.#ifndef
9370: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
9380: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
9390: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
93a0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
93b0: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
93c0: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
93d0: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
93e0: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
93f0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
9400: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
9410: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
9420: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
9430: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
9440: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
9450: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
9460: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
9470: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
9480: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
9490: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
94a0: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
94b0: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
94c0: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
94d0: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
94e0: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
94f0: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
9500: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
9510: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
9520: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
9530: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
9540: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
9550: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
9560: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
9570: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
9580: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9590: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
95a0: 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74  ION.  int (*xAut
95b0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
95c0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
95d0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
95e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9610: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
9620: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
9630: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
9640: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9650: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
9660: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
9670: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
9680: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9690: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
96a0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
96b0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
96c0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
96d0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
96e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
96f0: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
9700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9710: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
9720: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
9730: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
9740: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
9750: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9760: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
9770: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9780: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9790: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
97a0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
97b0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
97c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
97d0: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
97e0: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
97f0: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
9800: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
9810: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
9820: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
9830: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
9840: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
9850: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
9860: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
9870: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
9880: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
9890: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
98a0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
98b0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
98c0: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
98d0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
98e0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
98f0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
9900: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
9910: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
9920: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
9930: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
9940: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
9950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
9960: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
9970: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
9980: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
9990: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
99a0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
99b0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
99c0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
99d0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
99e0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
99f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
9a00: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
9a10: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
9a20: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
9a30: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
9a40: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
9a50: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
9a60: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
9a70: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
9a80: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
9a90: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
9aa0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
9ab0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ad0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
9ae0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
9af0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
9b00: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
9b10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9b20: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
9b30: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
9b40: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
9b50: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
9b60: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
9b70: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
9b80: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
9b90: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
9ba0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
9bb0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
9bc0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
9bd0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
9be0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
9bf0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
9c00: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
9c10: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
9c20: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23  n DbFree() */..#
9c30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
9c40: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
9c50: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
9c60: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
9c70: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
9c80: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
9c90: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
9ca0: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
9cb0: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
9cc0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
9cd0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
9ce0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
9cf0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
9d00: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
9d10: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
9d20: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
9d30: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
9d40: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
9d50: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
9d60: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
9d70: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
9d80: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
9d90: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
9da0: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
9db0: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
9dc0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
9dd0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
9de0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
9df0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
9e00: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
9e10: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
9e20: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
9e30: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
9e40: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
9e50: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
9e60: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
9e70: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
9e80: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
9e90: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
9ea0: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ec0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
9ed0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
9ee0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
9ef0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
9f00: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
9f10: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
9f20: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
9f30: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
9f40: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
9f50: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
9f60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
9f70: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
9f80: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
9f90: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
9fa0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
9fb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
9fc0: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
9fd0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
9fe0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
9ff0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
a000: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
a010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a020: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
a030: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
a040: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
a050: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
a060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
a070: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
a080: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
a090: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
a0a0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
a0b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
a0c0: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
a0d0: 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75  00004  /* Use fu
a0e0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
a0f0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
a100: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
a110: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
a120: 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  008  /* Use full
a130: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
a140: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
a150: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
a160: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 31  ll     0x0000001
a170: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
a180: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
a190: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a1a0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
a1b0: 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68  x00000020  /* Sh
a1c0: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
a1d0: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
a1e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a1f0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
a200: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
a210: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
a220: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
a230: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
a240: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
a250: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
a260: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
a270: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2a0: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
a2b0: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
a2c0: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
a300: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
a310: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
a320: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
a330: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
a340: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
a350: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
a360: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a390: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
a3a0: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
a3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
a3c0: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
a3d0: 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0200  /* Debug p
a3e0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
a3f0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
a400: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
a410: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
a420: 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  400  /* Debug li
a430: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
a440: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
a450: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
a460: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
a470: 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  800  /* OK to up
a480: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
a490: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
a4a0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
a4b0: 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20  ace 0x00001000  
a4c0: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
a4d0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
a4e0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
a4f0: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
a500: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
a510: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
a520: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
a530: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
a540: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
a550: 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20  tted 0x0004000  
a560: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
a570: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
a580: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
a590: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
a5a0: 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  8000  /* Create 
a5b0: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
a5c0: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
a5d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
a5e0: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
a5f0: 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  10000  /* Ignore
a600: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
a610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a620: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
a630: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52  0x00020000  /* R
a640: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
a650: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
a660: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
a670: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34  iggers    0x0004
a680: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
a690: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
a6a0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
a6b0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
a6c0: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
a6d0: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
a6e0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a6f0: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
a700: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
a710: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
a720: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
a730: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
a740: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
a750: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
a760: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00200000  /* Pre
a770: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
a780: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
a790: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
a7a0: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34  Extension  0x004
a7b0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
a7c0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
a7d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a7e0: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
a7f0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
a800: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
a810: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
a820: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
a830: 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30 30  Ks       0x01000
a840: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
a850: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
a860: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a870: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
a880: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
a890: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
a8a0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
a8b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
a8c0: 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34 30  EQP        0x040
a8d0: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
a8e0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
a8f0: 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  AN */.../*.** Bi
a900: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
a910: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
a920: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
a930: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
a940: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
a950: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
a960: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
a970: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
a980: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
a990: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
a9a0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
a9b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a9c0: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
a9d0: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
a9e0: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
a9f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
aa00: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
aa10: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
aa20: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
aa30: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
aa40: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
aa50: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
aa60: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
aa70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
aa80: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
aa90: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
aaa0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
aab0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
aac0: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
aad0: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
aae0: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
aaf0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
ab00: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
ab10: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
ab20: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
ab30: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
ab40: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
ab50: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
ab60: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
ab70: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
ab80: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
ab90: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
aba0: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
abb0: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
abc0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
abd0: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
abe0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
abf0: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
ac00: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
ac10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ac20: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
ac30: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
ac40: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
ac50: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
ac60: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
ac70: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
ac80: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
ac90: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
aca0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
acb0: 74 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78  tat3          0x
acc0: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68  0800   /* Use th
acd0: 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74  e SQLITE_STAT3 t
ace0: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
acf0: 53 51 4c 49 54 45 5f 41 64 6a 75 73 74 4f 75 74  SQLITE_AdjustOut
ad00: 45 73 74 20 20 20 30 78 31 30 30 30 20 20 20 2f  Est   0x1000   /
ad10: 2a 20 41 64 6a 75 73 74 20 6f 75 74 70 75 74 20  * Adjust output 
ad20: 65 73 74 69 6d 61 74 65 73 20 75 73 69 6e 67 20  estimates using 
ad30: 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
ad40: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
ad50: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
ad60: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
ad70: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
ad80: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
ad90: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
ada0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
adb0: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
adc0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  sabled..*/.#ifnd
add0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
ade0: 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66  UILTIN_TEST.#def
adf0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
ae00: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
ae10: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
ae20: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
ae30: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
ae40: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
ae50: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
ae60: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
ae70: 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ask))==0).#else.
ae80: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
ae90: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
aea0: 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e   mask)  0.#defin
aeb0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
aec0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
aed0: 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    1.#endif../*.*
aee0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
aef0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
af00: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
af10: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
af20: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
af30: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
af40: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
af50: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
af60: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
af70: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
af80: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
af90: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
afa0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
afb0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
afc0: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
afd0: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
afe0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
aff0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
b000: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
b010: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
b020: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
b030: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
b040: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
b050: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
b060: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
b070: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
b080: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
b090: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
b0a0: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
b0b0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
b0c0: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
b0d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b0e0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
b0f0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
b100: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
b110: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b120: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
b130: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
b140: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
b150: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
b160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b170: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
b180: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
b190: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
b1a0: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
b1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b1c0: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
b1d0: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
b1e0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
b1f0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
b200: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
b210: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
b220: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
b230: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b240: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
b250: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
b260: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
b270: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
b280: 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61  lite.aFunc.** ha
b290: 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20  sh table.  When 
b2a0: 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f  multiple functio
b2b0: 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ns have the same
b2c0: 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20   name, the hash 
b2d0: 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20  table.** points 
b2e0: 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  to a linked list
b2f0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
b300: 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ures..*/.struct 
b310: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20  FuncDef {.  i16 
b320: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
b330: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
b340: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
b350: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
b360: 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b    u16 funcFlags;
b370: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
b380: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
b390: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
b3a0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
b3b0: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
b3c0: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
b3d0: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
b3e0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
b3f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
b400: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
b410: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
b420: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b430: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b440: 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63   /* Regular func
b450: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
b460: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
b470: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
b480: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
b490: 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70  * Aggregate step
b4a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
b4b0: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
b4c0: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
b4e0: 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72  regate finalizer
b4f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
b500: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
b510: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
b520: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e  nction. */.  Fun
b530: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
b540: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
b550: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
b560: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
b570: 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72  h */.  FuncDestr
b580: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
b590: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
b5a0: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
b5b0: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
b5c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
b5d0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
b5e0: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
b5f0: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
b600: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
b610: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
b620: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
b630: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
b640: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
b650: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
b660: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
b670: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
b680: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
b690: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
b6a0: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
b6b0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
b6c0: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
b6d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
b6e0: 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a  Ref is set to .*
b6f0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
b700: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
b710: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
b720: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
b730: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
b740: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
b750: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
b760: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
b770: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
b780: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
b790: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
b7a0: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
b7b0: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
b7c0: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
b7d0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
b7e0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
b7f0: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
b800: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
b810: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
b820: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
b830: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
b840: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
b850: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
b860: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
b870: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
b880: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
b890: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
b8a0: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
b8b0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
b8c0: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
b8d0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
b8e0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
b8f0: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
b900: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
b910: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
b920: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
b930: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
b940: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
b950: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
b960: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
b970: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
b980: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
b990: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68  G_TYPEOFARG.  Th
b9a0: 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72  ere.** are asser
b9b0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
b9c0: 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65  n the code to ve
b9d0: 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64  rify this..*/.#d
b9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b9f0: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33  C_ENCMASK  0x003
ba00: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
ba10: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
ba20: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
ba30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ba40: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34  C_LIKE     0x004
ba50: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
ba60: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
ba70: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ba80: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
ba90: 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a  ASE     0x008 /*
baa0: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
bab0: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
bac0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
bad0: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
bae0: 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65     0x010 /* Ephe
baf0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
bb00: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
bb10: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
bb20: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f  NEEDCOLL 0x020 /
bb30: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
bb40: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
bb50: 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65  be called */.#de
bb60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
bb70: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30 20  _LENGTH   0x040 
bb80: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
bb90: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
bba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bbb0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
bbc0: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
bbd0: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
bbe0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
bbf0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
bc00: 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74    0x100 /* Built
bc10: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
bc20: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
bc30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
bc40: 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20  ALESCE 0x200 /* 
bc50: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
bc60: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
bc70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc80: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
bc90: 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x400 /* Built-i
bca0: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
bcb0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
bcc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
bcd0: 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43  STANT 0x800 /* C
bce0: 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
bcf0: 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
bd00: 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  utput */../*.** 
bd10: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
bd20: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
bd30: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
bd40: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
bd50: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
bd60: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
bd70: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
bd80: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
bd90: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
bda0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
bdb0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
bdc0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
bdd0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
bde0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
bdf0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
be00: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
be10: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
be20: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
be30: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
be40: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
be50: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
be60: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
be70: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
be80: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
be90: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
bea0: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
beb0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
bec0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
bed0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
bee0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
bef0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
bf00: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
bf10: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
bf20: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
bf30: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
bf40: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
bf50: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
bf60: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
bf70: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
bf80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
bf90: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
bfa0: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
bfb0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
bfc0: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
bfd0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
bfe0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
bff0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c000: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
c010: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
c020: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
c030: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
c040: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
c050: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
c060: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
c070: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c080: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
c090: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
c0a0: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
c0b0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
c0c0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c0d0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
c0e0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c0f0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c100: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c110: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c120: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
c130: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
c140: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
c150: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
c160: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
c170: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
c180: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
c190: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
c1a0: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
c1b0: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
c1c0: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
c1d0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
c1e0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
c1f0: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
c200: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
c210: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
c220: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
c230: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
c240: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
c250: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
c260: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
c270: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
c280: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
c290: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c2a0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c2b0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c2c0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c2d0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c2e0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c2f0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c300: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c310: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
c320: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c330: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
c340: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
c350: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c360: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
c370: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
c380: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
c390: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c3a0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c3b0: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
c3c0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c3d0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
c3e0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
c3f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c400: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
c410: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
c420: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
c430: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
c440: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
c450: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
c460: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
c470: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
c480: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c490: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
c4a0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
c4b0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
c4c0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
c4d0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
c4e0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
c4f0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
c500: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
c510: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
c520: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
c530: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
c540: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
c550: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c560: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
c570: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
c580: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
c590: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
c5a0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
c5b0: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
c5c0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
c5d0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
c5e0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
c5f0: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
c600: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
c610: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
c620: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
c630: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
c640: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a  ,#zName,0,0}../*
c650: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
c660: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
c670: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
c680: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
c690: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
c6a0: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
c6b0: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
c6c0: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
c6d0: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
c6e0: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
c6f0: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
c700: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
c710: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
c720: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
c730: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
c740: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
c750: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
c780: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
c790: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
c7a0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
c7b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c7c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c7d0: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
c7e0: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
c7f0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
c800: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c810: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
c820: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
c830: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
c840: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
c850: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
c860: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
c870: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
c880: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
c890: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
c8a0: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
c8b0: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
c8c0: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
c8d0: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
c8e0: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
c8f0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
c900: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
c910: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
c920: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
c930: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
c940: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
c950: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
c960: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
c970: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
c980: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
c990: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
c9a0: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
c9b0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
c9c0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
c9d0: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
c9e0: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
c9f0: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
ca00: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
ca10: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
ca20: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
ca30: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
ca40: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
ca50: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
ca60: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
ca70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
ca80: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
ca90: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
caa0: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
cad0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
cae0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
caf0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
cb00: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
cb10: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
cb20: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
cb30: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
cb40: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
cb50: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
cb60: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
cb70: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
cb80: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
cb90: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
cba0: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
cbb0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
cbc0: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
cbd0: 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  mn */.  Expr *pD
cbe0: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
cbf0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
cc00: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
cc10: 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f  ar *zDflt;     /
cc20: 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
cc30: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  of the default v
cc40: 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  alue */.  char *
cc50: 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61  zType;     /* Da
cc60: 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73  ta type for this
cc70: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
cc80: 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
cc90: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
cca0: 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
ccb0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
ccc0: 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
ccd0: 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
cce0: 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
ccf0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
cd00: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
cd10: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
cd20: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
cd30: 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
cd40: 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
cd50: 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
cd60: 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73  ted size of this
cd70: 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31   column.  INT==1
cd80: 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
cd90: 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
cda0: 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
cdb0: 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
cdc0: 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
cdd0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
cde0: 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
cdf0: 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
ce00: 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
ce10: 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
ce20: 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
ce30: 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
ce40: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
ce50: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
ce60: 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
ce70: 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
ce80: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
ce90: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
cea0: 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
ceb0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
cec0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ced0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
cee0: 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
cef0: 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
cf00: 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
cf10: 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
cf20: 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
cf30: 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
cf40: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
cf50: 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
cf60: 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
cf70: 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
cf80: 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
cf90: 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
cfa0: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
cfb0: 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
cfc0: 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
cfd0: 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
cfe0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
cff0: 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
d000: 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
d010: 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
d020: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d030: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
d040: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
d050: 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
d060: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
d070: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
d080: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
d090: 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
d0a0: 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
d0b0: 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
d0c0: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
d0d0: 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
d0e0: 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
d0f0: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
d100: 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
d110: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
d120: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
d130: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
d140: 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
d150: 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
d160: 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
d170: 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
d180: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d190: 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
d1a0: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
d1b0: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
d1c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
d1d0: 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
d1e0: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
d1f0: 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   order */../*.**
d200: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
d210: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
d220: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
d230: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
d240: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
d250: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
d260: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
d270: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
d280: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
d290: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
d2a0: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
d2b0: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
d2c0: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
d2d0: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
d2e0: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
d2f0: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
d300: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
d310: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
d320: 20 27 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'a'.  That way,
d330: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
d340: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
d350: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
d360: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
d370: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
d380: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
d390: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
d3a0: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
d3b0: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
d3c0: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
d3d0: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
d3e0: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
d3f0: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
d400: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
d410: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
d420: 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  son..*/.#define 
d430: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
d440: 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20      'a'.#define 
d450: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
d460: 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20      'b'.#define 
d470: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d480: 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20  IC  'c'.#define 
d490: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
d4a0: 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20  ER  'd'.#define 
d4b0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
d4c0: 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65      'e'..#define
d4d0: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
d4e0: 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
d4f0: 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
d500: 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
d510: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d520: 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
d530: 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
d540: 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
d550: 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
d560: 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  . .*/.#define SQ
d570: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
d580: 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x67../*.** Ad
d590: 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
d5a0: 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
d5b0: 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
d5c0: 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
d5d0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
d5e0: 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
d5f0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
d600: 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
d610: 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
d620: 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
d630: 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
d640: 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
d650: 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
d660: 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
d670: 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
d680: 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
d690: 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
d6a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
d6b0: 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
d6c0: 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
d6d0: 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
d6e0: 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
d6f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
d700: 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a  FNULL   0x08  /*
d710: 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
d720: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d730: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d740: 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
d750: 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x10  /* Store r
d760: 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
d770: 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
d780: 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
d790: 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
d7a0: 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
d7b0: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
d7c0: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
d7d0: 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73 73 65     0x88  /* Asse
d7e0: 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
d7f0: 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
d800: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
d810: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
d820: 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
d830: 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
d840: 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
d850: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d860: 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hema. .**.** If 
d870: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
d880: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
d890: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
d8a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
d8b0: 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
d8c0: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
d8d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
d8e0: 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
d8f0: 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
d900: 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
d910: 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
d920: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
d930: 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
d940: 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
d950: 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
d960: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
d970: 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
d980: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
d990: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
d9a0: 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
d9b0: 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
d9c0: 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
d9d0: 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73  ween .** databas
d9e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
d9f0: 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
da00: 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
da10: 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  ry database .** 
da20: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
da30: 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
da40: 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
da50: 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
da60: 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
da70: 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
da80: 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
da90: 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
daa0: 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
dab0: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
dac0: 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
dad0: 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
dae0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
daf0: 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
db00: 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
db10: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
db20: 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
db30: 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a  s real tables .*
db40: 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74  * within the dat
db50: 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74  abase. So that t
db60: 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61  hey appear as pa
db70: 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72  rt of the caller
db80: 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  s .** transactio
db90: 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
dba0: 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
dbb0: 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
dbc0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e  atabase .** conn
dbd0: 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
dbe0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
dbf0: 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
dc00: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
dc10: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
dc20: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
dc30: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
dc40: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
dc50: 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
dc60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
dc70: 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
dc80: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
dc90: 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
dca0: 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
dcb0: 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
dcc0: 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
dcd0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
dce0: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
dcf0: 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
dd00: 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
dd10: 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
dd20: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
dd30: 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
dd40: 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
dd50: 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
dd60: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
dd70: 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
dd80: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
dd90: 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
dda0: 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
ddb0: 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
ddc0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
ddd0: 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
dde0: 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
ddf0: 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
de00: 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
de10: 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
de20: 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
de30: 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
de40: 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
de50: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
de60: 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
de70: 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64  ts are not .** d
de80: 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
de90: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
dea0: 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
deb0: 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a  sconnect()ed .**
dec0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
ded0: 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
dee0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
def0: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
df00: 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
df10: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
df20: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
df30: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
df40: 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
df50: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
df60: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
df70: 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
df80: 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
df90: 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  ted .** next tim
dfa0: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
dfb0: 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
dfc0: 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
dfd0: 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
dfe0: 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
dff0: 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
e000: 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
e010: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
e020: 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
e030: 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
e040: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
e050: 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
e060: 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
e070: 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
e080: 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
e090: 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
e0a0: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
e0b0: 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
e0c0: 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
e0d0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
e0e0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
e0f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
e100: 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
e110: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
e120: 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
e130: 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62  by .** sqlite3Db
e140: 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
e150: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
e160: 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
e170: 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a  VTable.db as .**
e180: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
e190: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
e1a0: 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
e1b0: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
e1c0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
e1d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
e1e0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
e1f0: 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
e200: 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
e210: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
e220: 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
e230: 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
e240: 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
e250: 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
e260: 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
e270: 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
e280: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
e290: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e2a0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
e2b0: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
e2c0: 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
e2d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
e2e0: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
e2f0: 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
e300: 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
e310: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
e320: 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
e330: 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
e340: 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
e350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
e360: 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
e370: 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
e380: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
e390: 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72  h SQL table is r
e3a0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
e3b0: 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61  mory by an insta
e3c0: 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f  nce of the.** fo
e3d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e3e0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a  e..**.** Table.z
e3f0: 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  Name is the name
e400: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
e410: 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20  The case of the 
e420: 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41  original.** CREA
e430: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
e440: 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75  nt is stored, bu
e450: 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69  t case is not si
e460: 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a  gnificant for.**
e470: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a   comparisons..**
e480: 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69  .** Table.nCol i
e490: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
e4a0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
e4b0: 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43  table.  Table.aC
e4c0: 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  ol is a.** point
e4d0: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
e4e0: 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75  f Column structu
e4f0: 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63  res, one for eac
e500: 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20  h column..**.** 
e510: 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  If the table has
e520: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
e530: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61  ARY KEY, then Ta
e540: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65  ble.iPKey is the
e550: 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65   index of.** the
e560: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
e570: 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65  that key.   Othe
e580: 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65  rwise Table.iPKe
e590: 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20  y is negative.  
e5a0: 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  Note.** that the
e5b0: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
e5c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73   PRIMARY KEY mus
e5d0: 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72  t be INTEGER for
e5e0: 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a   this field to.*
e5f0: 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e  * be set.  An IN
e600: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
e610: 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  Y is used as the
e620: 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20   rowid for each 
e630: 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61  row of.** the ta
e640: 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65  ble.  If a table
e650: 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20   has no INTEGER 
e660: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
e670: 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  n a random rowid
e680: 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64  .** is generated
e690: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
e6a0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f   the table.  TF_
e6b0: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73  HasPrimaryKey is
e6c0: 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74   set if.** the t
e6d0: 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49  able has any PRI
e6e0: 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45  MARY KEY, INTEGE
e6f0: 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a  R or otherwise..
e700: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d  **.** Table.tnum
e710: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
e720: 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74  ber for the root
e730: 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74   BTree page of t
e740: 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a  he table in the.
e750: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
e760: 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20  .  If Table.iDb 
e770: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
e780: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
e790: 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e  le backend.** in
e7a0: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20   sqlite.aDb[].  
e7b0: 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69  0 is for the mai
e7c0: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31  n database and 1
e7d0: 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65   is for the file
e7e0: 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74   that.** holds t
e7f0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
e800: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66  and indices.  If
e810: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73   TF_Ephemeral is
e820: 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65   set.** then the
e830: 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64   table is stored
e840: 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20   in a file that 
e850: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
e860: 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e   deleted.** when
e870: 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   the VDBE cursor
e880: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73   to the table is
e890: 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69   closed.  In thi
e8a0: 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75  s case Table.tnu
e8b0: 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42  m .** refers VDB
e8c0: 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
e8d0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74  that holds the t
e8e0: 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74  able open, not t
e8f0: 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  o the root.** pa
e900: 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e  ge number.  Tran
e910: 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65  sient tables are
e920: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68   used to hold th
e930: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a  e results of a.*
e940: 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74  * sub-query that
e950: 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64   appears instead
e960: 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
e970: 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f   name in the FRO
e980: 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20  M clause .** of 
e990: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
e9a0: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  nt..*/.struct Ta
e9b0: 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
e9c0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
e9d0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
e9e0: 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
e9f0: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
ea00: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
ea10: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
ea20: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
ea30: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
ea40: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
ea50: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
ea60: 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
ea70: 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
ea80: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
ea90: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
eaa0: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
eab0: 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
eac0: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
ead0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
eae0: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
eaf0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
eb00: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
eb10: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
eb20: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
eb30: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
eb40: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
eb50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
eb60: 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20  HECK.  ExprList 
eb70: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
eb80: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
eb90: 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ints */.#endif. 
eba0: 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45   LogEst nRowLogE
ebb0: 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  st;   /* Estimat
ebc0: 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65  ed rows in table
ebd0: 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73   - from sqlite_s
ebe0: 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20  tat1 table */.  
ebf0: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
ec00: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
ec10: 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73  ee node for this
ec20: 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65   table (see note
ec30: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36   above) */.  i16
ec40: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
ec50: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
ec60: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
ec70: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69  PKey] as the pri
ec80: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31  mary key */.  i1
ec90: 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
eca0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ecb0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
ecc0: 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
ecd0: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
ece0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
ecf0: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
ed00: 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
ed10: 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
ed20: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
ed30: 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
ed40: 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
ed50: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
ed60: 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
ed70: 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
ed80: 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
ed90: 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
eda0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
edb0: 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61  ndif.  u8 tabFla
edc0: 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  gs;         /* M
edd0: 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
ede0: 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f  es */.  u8 keyCo
edf0: 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
ee00: 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
ee10: 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
ee20: 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
ee30: 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
ee40: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
ee50: 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
ee60: 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
ee70: 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
ee80: 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
ee90: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
eea0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
eeb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
eec0: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
eed0: 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
eee0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
eef0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
ef00: 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
ef10: 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
ef20: 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d  /* Text of all m
ef30: 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20  odule args. [0] 
ef40: 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a  is module name *
ef50: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
ef60: 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
ef70: 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
ef80: 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
ef90: 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
efa0: 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
efb0: 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
efc0: 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
efd0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
efe0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
eff0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
f000: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
f010: 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
f020: 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
f030: 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
f040: 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
f050: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
f060: 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
f070: 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flags..*/.#defin
f080: 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
f090: 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
f0a0: 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
f0b0: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
f0c0: 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
f0d0: 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
f0e0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
f0f0: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
f100: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
f110: 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
f120: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
f130: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
f140: 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
f150: 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
f160: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
f170: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
f180: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
f190: 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
f1a0: 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
f1b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
f1c0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
f1d0: 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30  outRowid    0x20
f1e0: 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20      /* No rowid 
f1f0: 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b 45  used. PRIMARY KE
f200: 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a  Y is the key */.
f210: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
f220: 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
f230: 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
f240: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
f250: 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
f260: 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
f270: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
f280: 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
f290: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
f2a0: 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
f2b0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
f2c0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
f2d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
f2e0: 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
f2f0: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
f300: 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
f310: 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61  lags & TF_Virtua
f320: 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  l)!=0).#  define
f330: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
f340: 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61  X) (((X)->colFla
f350: 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
f360: 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23  DEN)!=0).#else.#
f370: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
f380: 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20  al(X)      0.#  
f390: 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
f3a0: 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
f3b0: 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  f../* Does the t
f3c0: 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
f3d0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
f3e0: 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
f3f0: 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
f400: 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
f410: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
f420: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
f430: 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
f440: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
f450: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
f460: 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
f470: 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
f480: 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
f490: 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
f4a0: 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
f4b0: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
f4c0: 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
f4d0: 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
f4e0: 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
f4f0: 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
f500: 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
f510: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
f520: 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
f530: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
f540: 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
f550: 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
f560: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
f570: 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
f580: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
f590: 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
f5a0: 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
f5b0: 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
f5c0: 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
f5d0: 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
f5e0: 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
f5f0: 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
f600: 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
f610: 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
f620: 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
f630: 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
f640: 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
f650: 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
f660: 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
f670: 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
f680: 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
f690: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
f6a0: 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
f6b0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
f6c0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
f6d0: 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
f6e0: 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
f6f0: 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
f700: 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
f710: 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
f720: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
f730: 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
f740: 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
f750: 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
f760: 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
f770: 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
f780: 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
f790: 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
f7a0: 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
f7b0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
f7c0: 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
f7d0: 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
f7e0: 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
f7f0: 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
f800: 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
f810: 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
f820: 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
f830: 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
f840: 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
f850: 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
f860: 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
f870: 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
f880: 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
f890: 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
f8a0: 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
f8b0: 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
f8c0: 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
f8d0: 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
f8e0: 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
f8f0: 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
f900: 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
f910: 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
f920: 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
f930: 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
f940: 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
f950: 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
f960: 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
f970: 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
f980: 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
f990: 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
f9a0: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
f9b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f9c0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f9d0: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
f9e0: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
f9f0: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
fa00: 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
fa10: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
fa20: 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
fa30: 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
fa40: 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
fa50: 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
fa60: 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
fa70: 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
fa80: 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
fa90: 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
faa0: 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
fab0: 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
fac0: 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
fad0: 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
fae0: 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
faf0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
fb00: 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
fb10: 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
fb20: 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
fb30: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
fb40: 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
fb50: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
fb60: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
fb70: 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
fb80: 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
fb90: 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
fba0: 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
fbb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
fbc0: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
fbd0: 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
fbe0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
fbf0: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
fc00: 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
fc10: 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
fc20: 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
fc30: 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
fc40: 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
fc50: 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
fc60: 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
fc70: 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
fc80: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
fc90: 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
fca0: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
fcb0: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
fcc0: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
fcd0: 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
fce0: 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
fcf0: 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
fd00: 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
fd10: 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
fd20: 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
fd30: 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
fd40: 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
fd50: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
fd60: 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
fd70: 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
fd80: 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
fd90: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
fda0: 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
fdb0: 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
fdc0: 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
fdd0: 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
fde0: 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
fdf0: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
fe00: 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
fe10: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
fe20: 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
fe30: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
fe40: 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
fe50: 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
fe60: 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
fe70: 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
fe80: 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
fe90: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
fea0: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
feb0: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
fec0: 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
fed0: 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
fee0: 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
fef0: 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
ff00: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
ff10: 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
ff20: 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
ff30: 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
ff40: 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
ff50: 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
ff60: 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
ff70: 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
ff80: 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
ff90: 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
ffa0: 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
ffb0: 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
ffc0: 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
ffd0: 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
ffe0: 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
fff0: 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
10000 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
10010 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
10020 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
10030 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
10040 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
10050 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
10060 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
10070 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
10080 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
10090 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
100a0 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
100b0 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
100c0 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
100d0 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
100e0 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
100f0 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f  y..** .** The fo
10100 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
10110 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
10120 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
10130 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
10140 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
10150 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
10160 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
10170 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
10180 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
10190 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
101a0 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
101b0 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
101c0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
101d0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
101e0 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
101f0 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
10200 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
10210 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
10220 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10230 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
10240 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
10250 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
10260 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
10270 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
10280 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
10290 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
102a0 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
102b0 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
102c0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
102d0 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
102e0 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
102f0 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
10300 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
10310 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
10320 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
10330 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
10340 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
10350 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
10360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
10370 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
10380 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
10390 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
103a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
103b0 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
103c0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
103d0 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
103e0 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
103f0 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
10400 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
10410 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
10420 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
10430 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
10440 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
10450 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
10460 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
10470 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10480 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
10490 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
104a0 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
104b0 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
104c0 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
104d0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
104e0 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73  the .** comparis
104f0 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
10500 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
10510 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
10520 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
10530 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
10540 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
10550 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
10560 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
10570 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
10580 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
10590 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
105a0 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
105b0 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
105c0 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
105d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
105e0 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
105f0 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
10600 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
10610 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
10620 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
10630 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
10640 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
10650 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
10660 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
10670 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
10680 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
10690 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
106a0 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
106b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
106c0 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
106d0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
106e0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
106f0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
10700 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
10710 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
10720 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
10730 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
10740 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
10750 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
10760 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10770 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
10780 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
10790 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
107a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
107b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
107c0 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
107d0 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67   about a.** sing
107e0 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20  le index record 
107f0 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
10800 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
10810 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
10820 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  .** values..**.*
10830 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
10840 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
10850 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
10860 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
10870 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
10880 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
10890 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
108a0 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
108b0 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
108c0 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
108d0 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
108e0 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
108f0 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
10900 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
10910 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
10920 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
10930 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
10940 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
10950 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
10960 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72  ucture holds a r
10970 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
10980 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61  lready been disa
10990 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f  ssembled.** into
109a0 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74   its constituent
109b0 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54   fields..**.** T
109c0 68 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65 6d  he r1 and r2 mem
109d0 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 61 72  ber variables ar
109e0 65 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 74  e only used by t
109f0 68 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d  he optimized com
10a00 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74  parison.** funct
10a10 69 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64 43  ions vdbeRecordC
10a20 6f 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64 20  ompareInt() and 
10a30 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72  vdbeRecordCompar
10a40 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74  eString()..*/.st
10a50 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
10a60 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
10a70 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
10a80 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
10a90 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
10aa0 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ion */.  u16 nFi
10ab0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
10ac0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
10ad0 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
10ae0 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
10af0 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
10b00 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
10b10 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
10b20 20 20 75 38 20 69 73 43 6f 72 72 75 70 74 3b 20    u8 isCorrupt; 
10b30 20 20 20 20 20 20 2f 2a 20 43 6f 72 72 75 70 74        /* Corrupt
10b40 69 6f 6e 20 64 65 74 65 63 74 65 64 20 62 79 20  ion detected by 
10b50 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 28 29  xRecordCompare()
10b60 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
10b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
10b80 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b  ues */.  int r1;
10b90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10ba0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
10bb0 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
10bc0 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20  /.  int r2;     
10bd0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
10be0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72   to return if (r
10bf0 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a  hs < lhs) */.};.
10c00 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
10c10 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
10c20 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
10c30 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
10c40 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10c50 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
10c60 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
10c70 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
10c80 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
10c90 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
10ca0 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
10cb0 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
10cc0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
10cd0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
10ce0 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
10cf0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
10d00 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
10d10 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
10d20 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
10d30 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
10d40 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
10d50 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
10d60 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
10d70 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
10d80 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
10d90 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
10da0 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
10db0 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
10dc0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
10dd0 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
10de0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
10df0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
10e00 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
10e10 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
10e20 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
10e30 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
10e40 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
10e50 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
10e60 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
10e70 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63   the .** first c
10e80 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
10e90 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
10ea0 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
10eb0 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
10ec0 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
10ed0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
10ee0 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
10ef0 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
10f00 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
10f10 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
10f20 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
10f30 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
10f40 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
10f50 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
10f60 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
10f70 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
10f80 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
10f90 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
10fa0 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
10fb0 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
10fc0 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
10fd0 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
10fe0 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
10ff0 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
11000 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
11010 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
11020 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
11030 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
11040 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20   resolution .** 
11050 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
11060 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
11070 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
11080 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
11090 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
110a0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  t..*/.struct Ind
110b0 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
110c0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
110d0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
110e0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
110f0 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
11100 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
11110 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
11120 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
11130 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
11140 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
11150 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
11160 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
11170 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
11180 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
11190 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
111a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
111b0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
111c0 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
111d0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
111e0 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
111f0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
11200 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
11210 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
11220 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
11230 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
11240 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
11250 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
11260 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11270 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
11280 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
11290 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
112a0 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
112b0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
112c0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
112d0 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
112e0 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
112f0 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
11300 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
11310 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
11320 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
11330 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
11340 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
11350 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
11360 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
11370 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49  ndices */.  KeyI
11380 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
11390 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66       /* A KeyInf
113a0 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c  o object suitabl
113b0 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  e for this index
113c0 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
113e0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
113f0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
11400 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
11410 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
11420 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
11430 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
11440 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
11450 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
11460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11470 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11480 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
11490 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
114a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
114b0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
114c0 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
114d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
114e0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
114f0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
11500 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
11510 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
11520 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
11530 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
11540 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
11550 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
11560 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
11570 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
11580 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
11590 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
115a0 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
115b0 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
115c0 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
115d0 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
115e0 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
115f0 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
11600 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
11610 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
11620 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
11630 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
11640 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
11650 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
11660 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
11670 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
11680 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
11690 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20  index */.#ifdef 
116a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
116b0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
116c0 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
116d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
116e0 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
116f0 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
11700 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
11710 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
11720 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
11730 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
11740 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
11750 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
11760 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
11770 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
11780 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
11790 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
117a0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
117b0 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
117c0 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65  t-most key */.#e
117d0 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
117e0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
117f0 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
11800 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11810 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
11820 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
11830 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
11840 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
11850 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
11860 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
11870 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
11880 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
11890 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
118a0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
118b0 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
118c0 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
118d0 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
118e0 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  e */../* Return 
118f0 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
11900 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  is a PRIMARY KEY
11910 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
11920 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e  e IsPrimaryKeyIn
11930 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64  dex(X)  ((X)->id
11940 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44  xType==SQLITE_ID
11950 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
11960 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  )../*.** Each sa
11970 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
11980 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
11990 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
119a0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
119b0 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
119c0 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
119d0 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
119e0 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
119f0 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
11a00 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
11a10 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
11a20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
11a30 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
11a40 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
11a50 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
11a60 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
11a70 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
11a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11a90 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
11aa0 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
11ab0 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
11ac0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
11ad0 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
11ae0 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
11af0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
11b00 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
11b10 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
11b20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
11b30 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
11b40 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
11b50 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
11b60 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
11b70 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
11b80 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
11b90 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
11ba0 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d  * Each token com
11bb0 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  ing out of the l
11bc0 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61  exer is an insta
11bd0 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
11be0 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e  tructure.  Token
11bf0 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20  s are also used 
11c00 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78  as part of an ex
11c10 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  pression..**.** 
11c20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d  Note if Token.z=
11c30 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79  =0 then Token.dy
11c40 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72  n and Token.n ar
11c50 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a  e undefined and.
11c60 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72  ** may contain r
11c70 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44  andom values.  D
11c80 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61  o not make any a
11c90 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74  ssumptions about
11ca0 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e   Token.dyn.** an
11cb0 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54  d Token.n when T
11cc0 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74  oken.z==0..*/.st
11cd0 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
11ce0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
11cf0 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
11d00 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
11d10 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
11d20 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
11d30 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
11d40 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
11d50 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
11d60 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
11d70 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
11d80 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
11d90 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
11da0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
11db0 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
11dc0 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
11dd0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
11de0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
11df0 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
11e00 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
11e10 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
11e20 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
11e30 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
11e40 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
11e50 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
11e60 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
11e70 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
11e80 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
11e90 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
11ea0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
11eb0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
11ec0 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
11ed0 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
11ee0 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
11ef0 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
11f00 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
11f10 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
11f20 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
11f30 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
11f40 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
11f50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
11f60 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
11f70 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
11f80 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
11f90 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
11fa0 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
11fb0 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
11fc0 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
11fd0 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
11fe0 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
11ff0 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
12000 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
12010 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12030 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
12040 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
12050 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
12060 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
12070 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
12080 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
12090 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
120a0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
120b0 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
120d0 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
120e0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
120f0 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
12100 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
12110 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
12120 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
12130 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
12140 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
12150 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
12160 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
12170 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
12180 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
12190 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
121a0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
121b0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
121c0 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
121d0 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
121e0 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
121f0 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
12200 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
12210 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
12220 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
12230 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
12240 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
12250 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
12260 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
12270 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
12280 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
12290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
122a0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
122b0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
122c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
122d0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
122e0 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
122f0 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
12300 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12310 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
12320 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
12330 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
12340 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
12350 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
12360 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
12370 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
12380 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
123a0 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
123b0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
123c0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
123d0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
123e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
123f0 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
12400 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
12410 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
12420 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12430 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
12440 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
12450 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
12460 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
12470 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12480 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
12490 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
124a0 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
124c0 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
124d0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
124e0 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
124f0 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12510 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12520 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
12530 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
12540 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
12550 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
12560 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
12570 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
12580 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
12590 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
125a0 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
125b0 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
125c0 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
125d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
125e0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
125f0 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12610 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
12620 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
12630 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
12640 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
12650 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
12660 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
12670 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
12680 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
12690 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
126b0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
126c0 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
126d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
126e0 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
126f0 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
12700 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
12710 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
12720 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
12730 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
12740 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
12750 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
12760 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
12770 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
12780 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
12790 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
127a0 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
127b0 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
127c0 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
127d0 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
127e0 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
127f0 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
12800 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
12810 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
12820 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
12830 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
12840 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
12850 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
12860 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
12870 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
12880 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
12890 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
128a0 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
128b0 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
128c0 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
128d0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
128e0 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
128f0 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
12900 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
12910 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
12920 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
12930 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
12940 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
12950 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
12960 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
12970 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
12980 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
12990 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
129a0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
129b0 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
129c0 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
129d0 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
129e0 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
129f0 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
12a00 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
12a10 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
12a20 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
12a30 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
12a40 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
12a50 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
12a60 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
12a70 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
12a80 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
12a90 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
12aa0 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
12ab0 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
12ac0 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
12ad0 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
12ae0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12af0 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
12b00 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
12b10 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a  LOAT, TK_BLOB, .
12b20 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
12b30 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
12b40 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
12b50 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
12b60 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
12b70 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12b80 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
12b90 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
12ba0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
12bb0 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61  ns the .** varia
12bc0 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
12bd0 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
12be0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
12bf0 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
12c00 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
12c10 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
12c20 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
12c30 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
12c40 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
12c50 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
12c60 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
12c70 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
12c80 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
12c90 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
12ca0 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
12cb0 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
12cc0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
12cd0 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
12ce0 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
12cf0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
12d00 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
12d10 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
12d20 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
12d30 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
12d40 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
12d50 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
12d60 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
12d70 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
12d80 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
12d90 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
12da0 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
12db0 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
12dc0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
12dd0 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
12de0 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
12df0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
12e00 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
12e10 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
12e20 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
12e30 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
12e40 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
12e50 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
12e60 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
12e70 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
12e80 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
12e90 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
12ea0 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
12eb0 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
12ec0 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
12ed0 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
12ee0 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
12ef0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
12f00 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
12f10 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
12f20 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
12f30 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
12f40 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
12f50 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
12f60 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
12f70 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
12f80 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
12f90 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
12fa0 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
12fb0 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
12fc0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
12fd0 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
12fe0 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
12ff0 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
13000 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
13010 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
13020 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
13030 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
13040 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
13050 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
13060 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
13070 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61  ion mark .** cha
13080 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
13090 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
130a0 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
130b0 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
130c0 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  ndex .** number 
130d0 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
130e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
130f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
13100 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
13110 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
13120 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
13130 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
13140 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
13150 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
13160 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
13170 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
13180 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
13190 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
131a0 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
131b0 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
131c0 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
131d0 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
131e0 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
131f0 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
13200 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
13210 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
13220 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
13230 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
13240 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
13250 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
13260 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
13270 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
13280 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
13290 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
132a0 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
132b0 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
132c0 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
132d0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
132e0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
132f0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
13300 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
13310 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
13320 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
13330 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
13340 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
13350 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
13360 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
13370 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
13380 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
13390 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
133a0 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
133b0 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
133c0 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
133d0 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
133e0 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
133f0 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
13400 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
13410 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
13420 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
13430 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
13440 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
13450 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
13460 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
13470 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
13480 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
13490 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
134a0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
134b0 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
134c0 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
134d0 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
134e0 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
134f0 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
13500 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
13510 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
13520 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
13530 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
13540 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
13550 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
13560 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
13570 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
13580 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
13590 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
135a0 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
135b0 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
135c0 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
135d0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
135e0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
135f0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
13600 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13620 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
13630 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
13640 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
13650 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
13660 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
13670 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
13680 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
13690 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
136a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
136b0 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
136c0 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
136d0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
136e0 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
136f0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
13700 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
13710 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
13720 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
13730 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
13740 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
13750 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
13760 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
13770 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
13780 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
13790 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
137a0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
137b0 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
137c0 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
137d0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
137e0 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
137f0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
13800 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
13810 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
13820 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
13830 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20  or malfunction. 
13840 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
13850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 2f 0a 0a 20 20 45 78 70  ********/..  Exp
13890 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
138a0 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
138b0 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
138c0 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
138d0 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
138e0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
138f0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
13900 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
13910 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
13920 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
13930 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
13940 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
13950 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
13960 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
13970 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
13980 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
13990 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
139a0 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
139b0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
139c0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
139d0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
139e0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
139f0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
13a00 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
13a10 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
13a20 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
13a30 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
13a40 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
13a50 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
13a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
13aa0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
13ab0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
13ac0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
13ad0 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
13ae0 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
13af0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
13b00 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
13b10 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
13b20 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
13b30 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
13b40 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
13b50 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
13b60 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13b70 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
13b80 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ba0 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
13bb0 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
13bc0 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
13bf0 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b 65   1000 times like
13c00 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61  lihood */.  ynVa
13c10 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
13c20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
13c30 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
13c40 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
13c70 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
13c80 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
13c90 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
13ca0 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
13cb0 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
13cc0 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
13cd0 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
13ce0 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
13cf0 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
13d00 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
13d10 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
13d20 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
13d30 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
13d40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
13d50 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
13d60 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
13d70 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
13d80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13d90 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
13da0 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
13db0 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
13de0 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
13df0 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
13e00 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
13e10 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
13e20 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
13e30 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
13e40 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
13e50 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
13e60 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
13e70 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
13e80 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
13e90 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
13ea0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
13eb0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
13ec0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
13ed0 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
13ee0 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
13ef0 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72  ginated in ON or
13f00 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
13f10 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69   a join */.#defi
13f20 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
13f30 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
13f40 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
13f50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13f60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
13f70 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
13f80 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
13f90 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
13fa0 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
13fb0 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
13fc0 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
13fd0 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
13fe0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
13ff0 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
14000 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
14010 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
14020 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
14030 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
14040 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
14050 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
14060 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
14070 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
14080 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
14090 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
140a0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
140b0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
140c0 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
140d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
140e0 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
140f0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
14100 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
14110 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
14120 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
14130 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
14140 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
14150 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
14160 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
14170 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
14180 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
14190 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
141a0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
141b0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
141c0 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
141d0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
141e0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
141f0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
14200 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
14210 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
14220 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
14230 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
14240 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
14250 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
14260 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
14270 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
14280 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
14290 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
142a0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
142b0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
142c0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
142d0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
142e0 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
142f0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
14300 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
14310 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
14320 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
14330 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
14340 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
14350 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
14360 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
14370 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
14380 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
14390 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
143a0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
143b0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
143c0 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
143d0 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
143e0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
143f0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
14400 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
14410 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
14420 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
14430 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
14440 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
14450 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30  Constant  0x0800
14460 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
14470 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a  constant */../*.
14480 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
14490 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
144a0 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
144b0 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
144c0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
144d0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
144e0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
144f0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
14500 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
14510 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
14520 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
14530 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
14540 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
14550 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
14560 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
14570 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
14580 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
14590 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
145a0 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
145b0 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
145c0 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
145d0 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
145e0 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
145f0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
14600 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
14610 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
14620 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
14630 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
14640 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
14650 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
14660 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
14670 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
14680 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
14690 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
146a0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
146b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
146c0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
146d0 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
146e0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
146f0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
14700 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
14710 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
14720 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
14730 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
14740 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
14750 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
14760 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
14770 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
14780 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
14790 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
147a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
147b0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
147c0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
147d0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
147e0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
147f0 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
14800 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
14810 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
14820 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
14830 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
14840 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
14850 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
14860 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
14870 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
14880 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
14890 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
148a0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
148b0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
148c0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
148d0 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
148e0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
148f0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
14900 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
14910 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
14920 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
14930 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
14940 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
14950 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
14960 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
14970 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
14980 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
14990 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
149a0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
149b0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
149c0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
149d0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
149e0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
149f0 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
14a00 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
14a10 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
14a20 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
14a30 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
14a40 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
14a50 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
14a60 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
14a70 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
14a80 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
14a90 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
14aa0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
14ab0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
14ac0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
14ad0 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
14ae0 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
14af0 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
14b00 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
14b10 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
14b20 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
14b30 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
14b40 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
14b50 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
14b60 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
14b70 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
14b80 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
14b90 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
14ba0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
14bb0 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
14bc0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
14bd0 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
14be0 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
14bf0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
14c00 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
14c10 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
14c20 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
14c30 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
14c40 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
14c50 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
14c60 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
14c70 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
14c80 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
14c90 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
14ca0 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
14cb0 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
14cc0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
14cd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14ce0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
14cf0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
14d00 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
14d10 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
14d20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
14d30 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
14d40 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
14d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14d60 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
14d70 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
14d80 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14d90 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
14da0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
14db0 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
14dc0 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
14dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14de0 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
14df0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14e00 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
14e10 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
14e20 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
14e30 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
14e40 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
14e50 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
14e60 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
14e70 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
14e80 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
14e90 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
14ea0 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
14eb0 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
14ec0 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
14ed0 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
14ee0 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
14ef0 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
14f00 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
14f10 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
14f20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
14f30 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
14f40 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
14f50 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
14f60 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
14f70 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
14f80 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
14f90 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
14fa0 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
14fb0 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
14fc0 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
14fd0 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
14fe0 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
14ff0 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
15000 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
15010 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
15020 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
15030 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
15040 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
15050 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
15060 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
15070 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15080 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
15090 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
150a0 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
150b0 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
150c0 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
150d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
150e0 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
150f0 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
15100 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
15110 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
15120 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
15130 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
15140 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
15150 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
15160 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
15170 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
15180 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
15190 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
151a0 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
151b0 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
151c0 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
151d0 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
151e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
151f0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
15200 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
15210 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
15220 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
15230 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
15240 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
15250 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
15260 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
15270 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
15280 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
15290 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
152a0 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
152b0 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
152c0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
152d0 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
152e0 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
152f0 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
15300 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
15310 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
15320 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
15330 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
15340 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
15350 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
15360 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
15370 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
15380 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
15390 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
153a0 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
153b0 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
153c0 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
153d0 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
153e0 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
153f0 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
15400 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
15410 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
15420 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
15430 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
15440 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
15450 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
15460 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
15470 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
15480 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
15490 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
154a0 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
154b0 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
154c0 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
154d0 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
154e0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
154f0 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
15500 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
15510 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
15520 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
15530 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
15540 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
15550 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
15560 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
15570 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
15580 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
15590 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
155a0 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
155b0 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
155c0 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
155d0 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
155e0 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
155f0 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
15600 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
15610 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
15620 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
15630 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
15640 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
15650 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
15660 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
15670 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
15680 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
15690 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
156a0 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
156b0 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
156c0 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
156d0 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
156e0 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
156f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
15700 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
15710 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
15720 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15730 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
15740 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
15750 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
15760 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
15770 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
15780 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
15790 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
157a0 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
157b0 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
157c0 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
157d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
157e0 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
157f0 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
15800 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
15810 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
15820 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
15830 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
15840 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
15850 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
15860 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
15870 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
15880 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
15890 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
158a0 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
158b0 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
158c0 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
158d0 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
158e0 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
158f0 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
15900 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
15910 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
15920 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
15930 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
15940 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
15950 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
15960 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
15970 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
15980 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
15990 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
159a0 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
159b0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
159c0 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
159d0 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
159e0 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
159f0 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
15a00 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
15a10 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
15a20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
15a30 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
15a40 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
15a50 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
15a60 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
15a70 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
15a80 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
15a90 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
15aa0 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
15ab0 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
15ac0 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
15ad0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
15ae0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
15af0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
15b00 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
15b10 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
15b20 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
15b30 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
15b40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15b50 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
15b60 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
15b70 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
15b80 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
15b90 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
15ba0 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
15bb0 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
15bc0 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
15bd0 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
15be0 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
15bf0 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
15c00 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
15c10 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15c20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
15c30 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
15c40 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
15c50 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
15c60 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
15c70 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
15c80 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
15c90 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
15ca0 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
15cb0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
15cc0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
15cd0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
15ce0 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
15cf0 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
15d00 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
15d10 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
15d20 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
15d30 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
15d40 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
15d50 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
15d60 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
15d70 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
15d80 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
15d90 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
15da0 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
15db0 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
15dc0 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
15dd0 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
15de0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
15df0 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
15e00 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
15e10 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
15e20 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
15e30 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
15e40 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
15e50 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
15e60 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
15e70 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
15e80 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  use */.    unsig
15e90 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
15ea0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
15eb0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
15ec0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
15ed0 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
15ee0 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
15ef0 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
15f00 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
15f10 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
15f20 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
15f30 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
15f40 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
15f50 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ITH */.#ifndef S
15f60 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
15f70 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
15f80 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
15f90 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
15fa0 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
15fb0 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
15fc0 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
15fd0 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
15fe0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
15ff0 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
16000 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
16010 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
16020 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
16030 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
16040 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
16050 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
16060 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
16070 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
16080 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
16090 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
160a0 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
160b0 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
160c0 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
160d0 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
160e0 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
160f0 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
16100 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
16110 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
16120 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
16130 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
16140 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
16150 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
16160 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
16170 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
16180 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
16190 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
161a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
161b0 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
161c0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
161d0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
161e0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
161f0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
16200 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
16210 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
16220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
16230 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
16240 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
16250 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
16260 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
16270 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
16280 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
16290 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
162a0 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
162b0 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
162c0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
162d0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
162e0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
162f0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
16300 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
16310 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16320 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
16330 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
16340 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
16350 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
16360 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
16370 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
16380 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
16390 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
163a0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
163b0 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
163c0 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
163d0 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
163e0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
163f0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
16400 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
16410 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
16420 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
16430 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
16440 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
16450 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
16460 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
16470 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
16480 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
16490 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
164a0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
164b0 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
164c0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
164d0 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
164e0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
164f0 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
16500 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
16510 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
16520 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
16530 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
16540 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
16550 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
16560 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
16570 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
16580 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16590 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
165a0 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
165b0 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
165c0 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
165d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
165e0 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
165f0 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
16600 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
16610 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
16620 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
16630 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
16640 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
16650 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
16660 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
16670 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c  ne WHERE_AND_ONL
16680 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30  Y         0x0080
16690 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e   /* Don't use in
166a0 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72  dices for OR ter
166b0 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ms */.#define WH
166c0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
166d0 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
166e0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
166f0 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
16700 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
16710 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
16720 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
16730 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
16740 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
16750 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
16760 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
16770 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
16780 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
16790 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
167a0 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
167b0 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38  YGROUP      0x08
167c0 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
167d0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
167e0 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
167f0 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58  WHERE_REOPEN_IDX
16800 20 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a         0x1000 /*
16810 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52   Try to use OP_R
16820 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20  eopenIdx */../* 
16830 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
16840 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
16850 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
16860 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
16870 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
16880 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
16890 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
168a0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
168b0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
168c0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
168d0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
168e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
168f0 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
16900 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
16910 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
16920 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
16930 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
16940 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
16950 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
16960 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
16970 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
16980 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
16990 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
169a0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
169b0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
169c0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
169d0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
169e0 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
169f0 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
16a00 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
16a10 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
16a20 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
16a30 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
16a40 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
16a50 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
16a60 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
16a70 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
16a80 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
16a90 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
16aa0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
16ab0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
16ac0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
16ad0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
16ae0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
16af0 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
16b00 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
16b10 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
16b20 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
16b30 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
16b40 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
16b50 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
16b60 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
16b70 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
16b80 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
16b90 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
16ba0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
16bb0 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
16bc0 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
16bd0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
16be0 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
16bf0 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
16c00 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
16c10 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
16c20 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
16c30 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
16c40 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
16c50 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
16c60 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
16c70 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
16c80 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
16c90 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
16ca0 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
16cb0 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
16cc0 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
16cd0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
16ce0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
16cf0 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
16d00 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
16d10 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
16d20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
16d30 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
16d40 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
16d50 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
16d60 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
16d70 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
16d80 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
16d90 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
16da0 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
16db0 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
16dc0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
16dd0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
16de0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
16df0 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
16e00 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
16e10 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
16e20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
16e30 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
16e40 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
16e50 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
16e60 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
16e70 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
16e80 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
16e90 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
16ea0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
16eb0 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
16ec0 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
16ed0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
16ee0 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
16ef0 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
16f00 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
16f10 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
16f20 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
16f30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
16f40 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
16f50 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
16f60 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
16f70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16f80 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
16f90 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
16fa0 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
16fb0 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  u8 ncFlags;     
16fc0 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
16fd0 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
16fe0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
16ff0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
17000 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
17010 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
17020 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  cFlags field..*/
17030 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
17040 77 41 67 67 20 20 30 78 30 31 20 20 20 20 2f 2a  wAgg  0x01    /*
17050 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
17060 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
17070 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
17080 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
17090 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  02    /* One or 
170a0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
170b0 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
170c0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
170d0 65 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f 2a  eck   0x04    /*
170e0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
170f0 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
17100 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
17110 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
17120 67 67 46 75 6e 63 20 30 78 30 38 20 20 20 20 2f  ggFunc 0x08    /
17130 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
17140 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
17150 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
17160 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
17170 64 78 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20  dx   0x10    /* 
17180 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
17190 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
171a0 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a 2a  x WHERE */../*.*
171b0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
171c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
171d0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
171e0 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
171f0 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
17200 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
17210 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
17220 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
17230 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
17240 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
17250 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
17260 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
17270 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
17280 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
17290 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
172a0 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
172b0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
172c0 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
172d0 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
172e0 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
172f0 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
17300 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
17310 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
17320 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
17330 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
17340 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
17350 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
17360 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
17370 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
17380 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
17390 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
173a0 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
173b0 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
173c0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
173d0 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
173e0 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
173f0 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
17400 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
17410 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
17420 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
17430 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
17440 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
17450 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
17460 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
17470 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
17480 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
17490 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
174a0 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
174b0 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
174c0 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
174d0 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
174e0 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
174f0 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
17500 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
17510 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
17520 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
17530 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
17540 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
17550 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
17560 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
17570 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
17580 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
17590 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
175a0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
175b0 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
175c0 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
175d0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
175e0 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
175f0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
17600 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
17610 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
17620 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17640 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
17650 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
17660 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
17670 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61   */.  u16 selFla
17680 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
17690 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
176a0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
176b0 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
176c0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
176d0 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
176e0 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
176f0 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ers */.  int add
17700 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
17710 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
17720 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
17730 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
17740 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52  /.  u64 nSelectR
17750 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  ow;        /* Es
17760 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
17770 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
17780 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
17790 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
177a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
177b0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
177c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
177d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
177e0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
177f0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
17800 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
17810 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
17820 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
17830 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
17840 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
17850 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
17860 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
17870 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
17880 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
17890 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
178a0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
178b0 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
178c0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
178d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
178e0 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
178f0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
17900 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
17910 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
17920 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
17930 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
17940 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
17950 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
17960 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
17970 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
17980 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
17990 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
179a0 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
179b0 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
179c0 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
179d0 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
179e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
179f0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
17a00 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
17a10 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
17a20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
17a30 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
17a40 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
17a50 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
17a60 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
17a70 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
17a80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
17a90 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78  solved        0x
17aa0 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66  0002  /* Identif
17ab0 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
17ac0 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
17ad0 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
17ae0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
17af0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
17b00 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
17b10 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
17b20 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30  Ephemeral   0x00
17b30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  08  /* Uses the 
17b40 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
17b50 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
17b60 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
17b70 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71     0x0010  /* sq
17b80 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
17b90 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
17ba0 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
17bb0 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
17bc0 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d   0x0020  /* FROM
17bd0 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
17be0 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
17bf0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
17c00 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
17c10 30 30 34 30 20 20 4e 4f 54 20 55 53 45 44 20 2a  0040  NOT USED *
17c20 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
17c30 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30  ues          0x0
17c40 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  080  /* Synthesi
17c50 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
17c60 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17c80 20 20 20 20 20 30 78 30 31 30 30 20 20 4e 4f 54       0x0100  NOT
17c90 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65   USED */.#define
17ca0 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
17cb0 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50      0x0200  /* P
17cc0 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
17cd0 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
17ce0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
17cf0 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
17d00 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64   0x0400  /* Need
17d10 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
17d20 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
17d30 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
17d40 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
17d50 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65 20   0x0800  /* The 
17d60 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
17d70 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
17d80 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
17d90 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20  Compound        
17da0 30 78 31 30 30 30 20 20 2f 2a 20 50 61 72 74 20  0x1000  /* Part 
17db0 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  of a compound qu
17dc0 65 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  ery */.../*.** T
17dd0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
17de0 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69  SELECT can be di
17df0 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
17e00 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65  eral ways, as de
17e10 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20  fined.** by one 
17e20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17e30 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53   macros.  The "S
17e40 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73  RT" prefix means
17e50 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a   "SELECT Result.
17e60 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20  ** Type"..**.** 
17e70 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20      SRT_Union   
17e80 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
17e90 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20  s as a key in a 
17ea0 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
17eb0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
17ec0 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
17ed0 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
17ee0 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
17ef0 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
17f00 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
17f10 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
17f20 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
17f30 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
17f40 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
17f50 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
17f60 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
17f70 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
17f80 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17fa0 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
17fb0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
17fc0 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
17fd0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
17fe0 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
17ff0 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
18020 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
18030 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
18040 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
18050 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
18060 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
18070 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
18080 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
18090 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
180a0 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
180b0 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
180c0 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
180d0 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
180e0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
180f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
18100 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
18110 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
18120 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
18130 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
18160 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
18170 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
18180 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
18190 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
181a0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
181b0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
181c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
181d0 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
181e0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
181f0 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
18200 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
18220 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
18230 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
18240 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
18270 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
18280 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
18290 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
182a0 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
182b0 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
182c0 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
182d0 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
182e0 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
182f0 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
18300 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
18310 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
18320 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20  ->iSDParm. .**  
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
18350 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
18360 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
18370 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
18380 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
18390 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
183a0 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
183b0 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
183c0 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
183d0 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
183e0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
183f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
18400 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18420 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
18430 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
18440 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
18470 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
18480 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
18490 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
184a0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
184b0 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
184c0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
184d0 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
18500 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
18510 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
18520 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
18530 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
18540 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
18570 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
18580 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
18590 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
185b0 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
185c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
185d0 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
185e0 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
185f0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
18600 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
18610 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
18620 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
18630 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
18640 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
18650 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
18660 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
18670 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
18680 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
18690 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
186a0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
186b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
186c0 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
186d0 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
186e0 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
186f0 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18710 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
18720 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
18730 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
18760 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
18770 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
18780 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
18790 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
187a0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
187b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
187c0 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
187d0 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
187e0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
187f0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
18820 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
18830 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
18840 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
18850 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
18860 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
18870 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
18880 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
18890 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
188a0 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
188b0 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
188c0 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
188d0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
188e0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
188f0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
18900 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
18910 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
18920 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18930 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
18940 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
18950 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
18960 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
18970 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18980 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
18990 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
189a0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
189b0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
189c0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
189d0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
189e0 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
189f0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
18a00 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
18a10 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
18a20 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
18a30 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18a40 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
18a50 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
18a60 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
18a70 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
18a80 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
18a90 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
18aa0 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
18ab0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
18ac0 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
18ad0 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
18ae0 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
18af0 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
18b00 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
18b10 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
18b20 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
18b30 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
18b40 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
18b50 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
18b60 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
18b70 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
18b80 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
18b90 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
18ba0 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
18bb0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
18bc0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
18bd0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
18be0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
18bf0 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
18c00 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
18c10 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
18c20 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
18c30 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
18c40 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
18c50 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
18c60 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
18c70 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
18c80 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
18c90 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
18ca0 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
18cb0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
18cc0 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
18cd0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
18ce0 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
18cf0 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
18d00 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
18d10 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
18d20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
18d30 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
18d40 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
18d50 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
18d60 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
18d70 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
18d80 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
18d90 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
18da0 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
18db0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
18dc0 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
18dd0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
18de0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
18df0 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
18e00 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
18e10 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
18e20 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
18e30 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
18e40 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
18e50 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
18e60 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
18e70 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
18e80 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
18e90 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
18ea0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
18eb0 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
18ec0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
18ed0 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
18ee0 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
18ef0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
18f00 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
18f10 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
18f20 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
18f30 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
18f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
18f50 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
18f60 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
18f70 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
18f80 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
18f90 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66  t;        /* Aff
18fa0 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
18fb0 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
18fc0 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
18fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
18fe0 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
18ff0 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
19000 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
19010 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
19020 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
19030 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
19040 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
19050 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
19060 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19070 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
19080 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45  allocated */.  E
19090 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
190a0 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
190b0 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
190c0 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
190d0 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
190e0 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
190f0 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
19100 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
19110 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
19120 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c  CREMENT .** tabl
19130 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
19140 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
19150 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
19160 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
19170 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
19180 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
19190 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
191a0 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
191b0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
191c0 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
191d0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
191e0 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
191f0 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
19200 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
19210 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
19220 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74  rts are down wit
19230 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
19240 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
19250 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
19260 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
19270 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
19280 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
19290 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
192a0 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
192b0 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
192c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
192d0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
192e0 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
192f0 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
19300 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
19310 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
19320 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
19330 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
19340 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
19350 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
19360 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
19370 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
19380 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
19390 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
193a0 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
193b0 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
193c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
193d0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
193e0 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
193f0 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
19400 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
19410 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
19420 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
19430 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
19440 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
19450 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
19460 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
19470 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
19480 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
19490 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
194a0 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a  ated for each .*
194b0 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
194c0 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
194d0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
194e0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
194f0 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
19500 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
19510 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
19520 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
19530 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
19540 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
19550 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
19560 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
19570 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
19580 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
19590 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
195a0 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
195b0 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
195c0 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
195d0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
195e0 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
195f0 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
19600 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
19610 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
19620 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
19630 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
19640 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
19650 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
19660 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
19670 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
19680 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
19690 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
196a0 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
196b0 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
196c0 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
196d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
196e0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
196f0 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
19700 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
19710 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
19720 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
19730 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
19740 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
19750 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20  esult of INSERT 
19760 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
19770 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
19780 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
19790 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
197a0 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
197b0 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
197c0 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
197d0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
197e0 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
197f0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
19800 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
19810 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
19820 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
19830 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
19840 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
19850 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
19860 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
19870 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
19880 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
19890 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
198a0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
198b0 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
198c0 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
198d0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
198e0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
198f0 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
19900 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
19910 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
19920 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
19930 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
19940 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
19950 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
19960 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
19970 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
19980 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
19990 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
199a0 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
199b0 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
199c0 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
199d0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
199e0 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
199f0 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
19a00 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
19a10 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
19a20 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
19a30 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
19a40 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
19a50 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
19a60 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
19a70 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
19a80 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
19a90 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
19aa0 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
19ab0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
19ac0 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
19ad0 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
19ae0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
19af0 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
19b00 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
19b10 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
19b20 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
19b30 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
19b40 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
19b50 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
19b60 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
19b70 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
19b80 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
19b90 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
19ba0 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
19bb0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
19bc0 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
19bd0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
19be0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
19bf0 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
19c00 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
19c10 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
19c20 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
19c30 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
19c40 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
19c50 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
19c60 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
19c70 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
19c80 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
19c90 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
19ca0 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
19cb0 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
19cc0 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
19cd0 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
19ce0 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
19cf0 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
19d00 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
19d10 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
19d20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
19d30 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
19d40 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
19d50 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
19d60 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
19d70 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
19d80 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
19d90 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
19da0 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
19db0 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
19dc0 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
19dd0 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
19de0 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
19df0 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
19e00 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74  d-cache .** feat
19e10 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
19e20 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
19e30 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
19e40 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
19e50 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
19e60 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
19e70 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
19e80 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
19e90 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
19ea0 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
19eb0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
19ec0 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
19ed0 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
19ee0 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
19ef0 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
19f00 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
19f10 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
19f20 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
19f30 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
19f40 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
19f50 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
19f60 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
19f70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
19f80 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
19f90 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
19fa0 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
19fb0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
19fc0 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
19fd0 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
19fe0 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
19ff0 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
1a000 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
1a010 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
1a020 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
1a030 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
1a040 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
1a050 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
1a060 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
1a070 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
1a080 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
1a090 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
1a0a0 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
1a0b0 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
1a0c0 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
1a0d0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1a0e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
1a0f0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1a100 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
1a110 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
1a120 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
1a130 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1a140 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
1a150 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1a160 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
1a170 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a180 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1a190 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
1a1a0 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
1a1b0 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
1a1c0 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
1a1d0 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
1a1e0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1a1f0 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
1a200 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
1a210 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
1a220 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
1a230 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
1a240 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c  g[8];     /* Hol
1a250 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1a260 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1a270 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  s */.  int nRang
1a280 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
1a290 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
1a2a0 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1a2b0 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
1a2c0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1a2d0 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1a2e0 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
1a2f0 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1a300 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1a310 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a320 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
1a330 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
1a340 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a350 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
1a360 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
1a370 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
1a380 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
1a390 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
1a3a0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
1a3b0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1a3c0 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
1a3d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1a3e0 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  ets used so far 
1a3f0 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20  */.  int nOnce; 
1a400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a410 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69  ber of OP_Once i
1a420 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66  nstructions so f
1a430 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
1a440 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1a450 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
1a460 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1a470 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1a480 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20  t iFixedOp;     
1a490 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b     /* Never back
1a4a0 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69   out opcodes iFi
1a4b0 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69  xedOp-1 or earli
1a4c0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61  er */.  int ckBa
1a4d0 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  se;          /* 
1a4e0 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66  Base register of
1a4f0 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65   data during che
1a500 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
1a510 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78  /.  int iPartIdx
1a520 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  Tab;     /* Tabl
1a530 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1a540 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  to a partial ind
1a550 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ex */.  int iCac
1a560 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1a570 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1a580 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1a590 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1a5a0 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1a5b0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1a5c0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1a5d0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1a5e0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1a5f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1a600 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1a610 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1a620 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1a630 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1a640 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1a650 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73  he labels */.  s
1a660 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
1a670 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
1a680 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1a690 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
1a6a0 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43  er */.    i16 iC
1a6b0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
1a6c0 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
1a6d0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
1a6e0 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
1a6f0 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
1a700 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
1a710 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
1a720 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
1a730 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
1a740 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
1a750 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
1a760 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
1a770 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
1a780 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
1a790 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
1a7a0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a7c0 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
1a7d0 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
1a7e0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
1a7f0 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
1a800 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
1a810 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
1a820 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
1a830 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
1a840 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
1a850 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
1a860 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1a870 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
1a880 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
1a890 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
1a8a0 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
1a8b0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
1a8c0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
1a8d0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
1a8e0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
1a8f0 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
1a900 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
1a910 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
1a920 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
1a930 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
1a940 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f  ses */.  int coo
1a950 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f  kieValue[SQLITE_
1a960 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b  MAX_ATTACHED+2];
1a970 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63    /* Values of c
1a980 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79  ookies to verify
1a990 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
1a9a0 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
1a9b0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1a9c0 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
1a9d0 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
1a9e0 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
1a9f0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1aa00 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
1aa10 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
1aa20 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
1aa30 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
1aa40 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
1aa50 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
1aa60 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
1aa70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 6e 64 65  rogram */.#ifnde
1aa80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1aa90 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1aaa0 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1aab0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1aac0 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1aad0 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1aae0 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1aaf0 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1ab00 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1ab10 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1ab20 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1ab30 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1ab40 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1ab50 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1ab60 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
1ab70 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1ab80 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
1ab90 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
1aba0 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
1abb0 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1abc0 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1abd0 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1abe0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1abf0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1ac00 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1ac10 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1ac20 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1ac30 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1ac40 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1ac50 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61  s of OP_CreateTa
1ac60 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ble opcode on CR
1ac70 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1ac80 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20  int addrSkipPK; 
1ac90 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1aca0 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  of instruction t
1acb0 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b  o skip PRIMARY K
1acc0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33  EY index */.  u3
1acd0 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1ace0 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1acf0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1ad00 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1ad10 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1ad20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1ad30 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1ad40 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1ad50 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1ad60 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1ad70 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1ad80 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1ad90 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1ada0 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1adb0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1adc0 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1add0 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1ade0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1adf0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1ae00 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1ae10 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1ae20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1ae30 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1ae40 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1ae50 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1ae60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ae70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ae80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ae90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1aea0 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1aeb0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1aec0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1aed0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1aee0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1aef0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1af00 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1af10 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1af20 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1af30 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1af40 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1af50 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1af60 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1af70 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1af80 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1af90 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1afa0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1afb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1afc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1afd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1afe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
1aff0 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20  int nVar;       
1b000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b010 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1b020 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1b030 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1b040 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1b050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b060 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1b070 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1b080 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1b090 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1b0a0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1b0b0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1b0c0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1b0d0 20 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20   bFreeWith;     
1b0e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b0f0 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20  if pWith should 
1b100 62 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61  be freed with pa
1b110 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70  rser */.  u8 exp
1b120 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
1b130 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1b140 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
1b150 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
1b160 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
1b170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1b180 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
1b190 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
1b1a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1b1b0 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
1b1c0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
1b1d0 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
1b1e0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
1b1f0 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
1b200 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
1b210 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
1b220 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
1b230 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b240 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
1b250 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
1b260 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
1b270 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b280 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
1b290 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
1b2a0 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
1b2b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1b2c0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1b2d0 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
1b2e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
1b2f0 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
1b300 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
1b310 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
1b320 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
1b330 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
1b340 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
1b350 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1b360 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
1b370 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
1b380 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
1b390 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
1b3a0 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
1b3b0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
1b3c0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
1b3d0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
1b3e0 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
1b3f0 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
1b400 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
1b410 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
1b420 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
1b430 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
1b440 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
1b450 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
1b460 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
1b470 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
1b480 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
1b490 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1b4a0 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
1b4b0 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
1b4c0 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
1b4d0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
1b4e0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1b4f0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
1b500 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
1b510 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
1b520 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54  callbacks */.  T
1b530 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1b540 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1b550 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
1b560 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
1b570 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
1b580 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1b590 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
1b5a0 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
1b5b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1b5c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1b5d0 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b5f0 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
1b600 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
1b610 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
1b620 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
1b630 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1b640 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1b650 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
1b660 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
1b670 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
1b680 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1b690 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
1b6a0 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
1b6b0 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
1b6c0 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
1b6d0 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
1b6e0 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
1b6f0 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
1b700 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1b710 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
1b720 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
1b730 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  r NULL */.};../*
1b740 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
1b750 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
1b760 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
1b770 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
1b780 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
1b790 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1b7a0 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
1b7b0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1b7c0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
1b7d0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1b7e0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
1b7f0 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
1b800 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1b810 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1b820 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
1b830 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
1b840 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
1b850 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
1b860 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1b870 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
1b880 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
1b890 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
1b8a0 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
1b8b0 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
1b8c0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1b8d0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
1b8e0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1b8f0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
1b900 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1b910 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1b920 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
1b930 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
1b940 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
1b950 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
1b960 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23  us opcodes..*/.#
1b970 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
1b980 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
1b990 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1b9a0 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
1b9b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1b9c0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
1b9d0 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20   0x02    /* Set 
1b9e0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
1b9f0 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
1ba00 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
1ba10 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
1ba20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
1ba30 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
1ba40 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
1ba50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
1ba60 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
1ba70 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
1ba80 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
1ba90 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
1baa0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
1bab0 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
1bac0 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
1bad0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
1bae0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43  #define OPFLAG_C
1baf0 4c 45 41 52 43 41 43 48 45 20 20 20 20 30 78 32  LEARCACHE    0x2
1bb00 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73  0    /* Clear ps
1bb10 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65  eudo-table cache
1bb20 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f   in OP_Column */
1bb30 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1bb40 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
1bb50 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
1bb60 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
1bb70 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
1bb80 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
1bb90 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
1bba0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1bbb0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
1bbc0 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
1bbd0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1bbe0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1bbf0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
1bc00 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
1bc10 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
1bc20 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
1bc30 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50      0x02    /* P
1bc40 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
1bc50 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
1bc60 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
1bc70 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
1bc80 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1bc90 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
1bca0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
1bcb0 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
1bcc0 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
1bcd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1bce0 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
1bcf0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
1bd00 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
1bd10 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  er. . *. * Point
1bd20 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
1bd30 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1bd40 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
1bd50 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
1bd60 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
1bd70 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
1bd80 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
1bd90 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
1bda0 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64  nts the . *    d
1bdb0 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
1bdc0 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
1bdd0 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
1bde0 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
1bdf0 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
1be00 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
1be10 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
1be20 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
1be30 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
1be40 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
1be50 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
1be60 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
1be70 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
1be80 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
1be90 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
1bea0 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
1beb0 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
1bec0 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
1bed0 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
1bee0 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
1bef0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1bf00 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
1bf10 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1bf20 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
1bf30 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
1bf40 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
1bf50 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
1bf60 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
1bf70 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
1bf80 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
1bf90 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1bfa0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
1bfb0 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfd0 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
1bfe0 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
1bff0 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
1c000 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
1c010 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
1c020 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
1c030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c040 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1c050 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1c060 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
1c070 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
1c080 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
1c090 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
1c0a0 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
1c0b0 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
1c0c0 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
1c0d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1c0e0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
1c0f0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79   expression (may
1c100 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49   be NULL) */.  I
1c110 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b  dList *pColumns;
1c120 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69         /* If thi
1c130 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f  s is an UPDATE O
1c140 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  F <column-list> 
1c150 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20  trigger,.       
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d        the <colum
1c180 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65  n-list> is store
1c190 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  d here */.  Sche
1c1a0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
1c1b0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1c1c0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
1c1d0 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61  gger */.  Schema
1c1e0 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20   *pTabSchema;   
1c1f0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1c200 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
1c210 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1c220 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a  p *step_list; /*
1c230 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72   Link list of tr
1c240 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74  igger program st
1c250 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20  eps             
1c260 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1c270 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1c280 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73  Next trigger ass
1c290 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1c2a0 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
1c2b0 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73  .** A trigger is
1c2c0 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45   either a BEFORE
1c2d0 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69   or an AFTER tri
1c2e0 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  gger.  The follo
1c2f0 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  wing constants.*
1c300 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  * determine whic
1c310 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  h. .**.** If the
1c320 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
1c330 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
1c340 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
1c350 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
1c360 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
1c370 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
1c380 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
1c390 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
1c3a0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
1c3b0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
1c3c0 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
1c3d0 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
1c3e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
1c3f0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
1c400 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1c410 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
1c420 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
1c430 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
1c440 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a  igger-program. .
1c450 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
1c460 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1c470 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
1c480 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
1c490 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
1c4a0 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
1c4b0 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
1c4c0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
1c4d0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1c4e0 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73  er of the . * as
1c4f0 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
1c500 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
1c510 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
1c520 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
1c530 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
1c540 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
1c550 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
1c560 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22  am.. * . * The "
1c570 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
1c580 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
1c590 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
1c5a0 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
1c5b0 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
1c5c0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
1c5d0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
1c5e0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
1c5f0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1c600 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f   the . * value o
1c610 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
1c620 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
1c630 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
1c640 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
1c650 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
1c660 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
1c670 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
1c680 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1c690 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
1c6a0 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1c6b0 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1c6c0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1c6d0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
1c6e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1c6f0 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
1c700 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20  LL.. * target   
1c710 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1c720 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1c730 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1c740 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
1c750 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1c760 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1c770 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
1c780 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
1c790 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1c7a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1c7b0 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
1c7c0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
1c7d0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1c7e0 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
1c7f0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1c800 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
1c810 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
1c820 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20  ES ... . *      
1c830 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1c840 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f  t, then this sto
1c850 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e  res the column-n
1c860 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20  ames to be. *   
1c870 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
1c880 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20  ted into.. *. * 
1c890 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45  (op == TK_DELETE
1c8a0 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
1c8b0 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1c8c0 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1c8d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1c8e0 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
1c8f0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
1c900 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1c910 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
1c920 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
1c930 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
1c950 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1c960 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
1c970 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  DATE). * target 
1c980 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1c990 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1c9a0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1c9b0 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77  le to update row
1c9c0 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20  s of.. * pWhere 
1c9d0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1c9e0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
1c9f0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
1ca00 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1ca10 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1ca20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1ca30 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
1ca40 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
1ca50 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
1ca60 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
1ca70 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
1ca80 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1ca90 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
1caa0 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
1cab0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
1cac0 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
1cad0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
1cae0 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72  ent.. * . */.str
1caf0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1cb00 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
1cb10 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1cb20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1cb30 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1cb40 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
1cb50 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
1cb60 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
1cb70 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
1cb80 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
1cb90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
1cba0 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
1cbb0 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
1cbc0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
1cbd0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
1cbe0 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72  LECT statment or
1cbf0 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
1cc00 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  NTO .. SELECT ..
1cc10 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72  . */.  Token tar
1cc20 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  get;        /* T
1cc30 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20  arget table for 
1cc40 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20  DELETE, UPDATE, 
1cc50 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72  INSERT */.  Expr
1cc60 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1cc70 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
1cc80 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20  ause for DELETE 
1cc90 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20  or UPDATE steps 
1cca0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1ccb0 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54  ExprList; /* SET
1ccc0 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
1ccd0 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  TE. */.  IdList 
1cce0 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
1ccf0 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
1cd00 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72  r INSERT */.  Tr
1cd10 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
1cd20 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
1cd30 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
1cd40 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
1cd50 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
1cd60 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
1cd70 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
1cd80 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
1cd90 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
1cda0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1cdb0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
1cdc0 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
1cdd0 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
1cde0 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
1cdf0 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
1ce00 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
1ce10 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
1ce20 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20  es.** explicit. 
1ce30 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72   .*/.typedef str
1ce40 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
1ce50 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
1ce60 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
1ce70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
1ce80 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
1ce90 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
1cea0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
1ceb0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1cec0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
1ced0 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
1cee0 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
1cef0 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
1cf00 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
1cf10 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
1cf20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
1cf30 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
1cf40 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
1cf50 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
1cf60 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
1cf70 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
1cf80 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
1cf90 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
1cfa0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1cfb0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1cfc0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
1cfd0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
1cfe0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
1cff0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1d000 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1d010 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
1d020 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
1d030 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
1d040 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
1d050 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
1d060 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
1d070 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
1d080 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
1d090 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
1d0a0 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
1d0b0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1d0c0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
1d0d0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
1d0e0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
1d0f0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
1d100 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
1d110 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
1d120 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
1d130 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
1d140 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
1d150 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
1d160 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
1d170 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
1d180 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
1d190 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
1d1a0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
1d1b0 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
1d1c0 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
1d1d0 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
1d1e0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
1d1f0 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
1d200 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1d210 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c  allowed string l
1d220 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20  ength */.  u8   
1d230 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  useMalloc;      
1d240 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20  /* 0: none,  1: 
1d250 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c  sqlite3DbMalloc,
1d260 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c    2: sqlite3_mal
1d270 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  loc */.  u8   ac
1d280 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
1d290 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
1d2a0 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  or STRACCUM_TOOB
1d2b0 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65  IG */.};.#define
1d2c0 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
1d2d0 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41    1.#define STRA
1d2e0 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a  CCUM_TOOBIG  2..
1d2f0 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
1d300 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
1d310 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
1d320 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
1d330 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
1d340 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
1d350 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
1d360 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
1d370 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
1d380 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
1d390 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1d3a0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
1d3b0 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
1d3c0 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
1d3d0 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
1d3e0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
1d3f0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1d400 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1d410 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
1d420 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
1d430 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
1d440 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
1d450 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1d460 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
1d470 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
1d480 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
1d490 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
1d4a0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
1d4b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
1d4c0 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
1d4d0 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
1d4e0 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
1d4f0 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
1d500 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
1d510 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1d520 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
1d530 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1d560 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
1d570 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
1d580 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
1d590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d5a0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
1d5b0 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
1d5c0 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1d5f0 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
1d600 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
1d610 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
1d620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1d630 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
1d640 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
1d650 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
1d660 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1d670 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
1d680 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
1d690 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
1d6a0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
1d6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d6c0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1d6d0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
1d6e0 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
1d6f0 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
1d700 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1d710 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
1d720 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
1d730 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d750 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1d760 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
1d770 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
1d780 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1d790 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1d7a0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1d7b0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71  er count */.  sq
1d7c0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1d7d0 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
1d7e0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
1d7f0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
1d800 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1d810 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1d820 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
1d830 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
1d840 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
1d850 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
1d860 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
1d870 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
1d880 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
1d890 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
1d8a0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d8c0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
1d8d0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
1d8e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1d8f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1d900 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
1d910 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
1d920 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
1d930 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
1d940 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
1d950 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
1d960 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
1d970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1d980 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
1d990 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
1d9a0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
1d9b0 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
1d9c0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
1d9d0 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
1d9e0 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74  /.  void *pScrat
1d9f0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1da00 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68        /* Scratch
1da10 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1da20 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20   szScratch;     
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da40 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73  * Size of each s
1da50 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f  cratch buffer */
1da60 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b  .  int nScratch;
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1da90 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  f scratch buffer
1daa0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  s */.  void *pPa
1dab0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1dac0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
1dad0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
1dae0 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1db10 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
1db20 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
1db30 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1db40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1db50 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
1db60 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1db70 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
1db80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1db90 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
1dba0 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
1dbb0 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
1dbc0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
1dbd0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1dbe0 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
1dbf0 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
1dc00 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  d */.  /* The ab
1dc10 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
1dc20 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
1dc30 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
1dc40 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
1dc50 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
1dc60 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
1dc70 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
1dc80 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1dca0 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
1dcb0 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
1dcc0 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
1dcd0 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dcf0 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
1dd00 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
1dd10 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
1dd20 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dd40 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
1dd50 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
1dd60 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
1dd70 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
1dd80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1dd90 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
1dda0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
1ddb0 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
1ddc0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1ddd0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1dde0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1ddf0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1de00 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
1de30 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
1de40 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1de50 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
1de60 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
1de70 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
1de80 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
1de90 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
1dea0 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
1deb0 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
1dec0 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
1ded0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
1dee0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1def0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
1df00 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
1df10 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
1df20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
1df30 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
1df40 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
1df50 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1df60 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
1df70 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
1df80 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1df90 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
1dfa0 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
1dfb0 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
1dfc0 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
1dfd0 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
1dfe0 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
1dff0 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
1e000 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
1e010 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1e020 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
1e030 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
1e040 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
1e050 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
1e060 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
1e070 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
1e080 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
1e090 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
1e0c0 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
1e0d0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1e0e0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
1e0f0 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78  N_TEST.  int (*x
1e100 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
1e110 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
1e120 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
1e130 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
1e140 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
1e150 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
1e160 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e170 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
1e180 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b  me() calls */.};
1e190 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
1e1a0 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
1e1b0 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
1e1c0 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
1e1d0 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
1e1e0 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
1e1f0 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
1e200 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
1e210 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
1e220 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1e230 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
1e240 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
1e250 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
1e260 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
1e270 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
1e280 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
1e290 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
1e2a0 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
1e2b0 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
1e2c0 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
1e2d0 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
1e2e0 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
1e2f0 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
1e300 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
1e310 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
1e320 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
1e330 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
1e340 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
1e350 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
1e360 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
1e370 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
1e380 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
1e390 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
1e3a0 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
1e3b0 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
1e3c0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
1e3d0 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
1e3e0 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
1e3f0 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
1e400 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
1e410 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
1e420 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
1e430 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
1e440 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
1e450 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
1e460 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
1e470 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
1e480 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
1e490 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
1e4a0 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
1e4b0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1e4c0 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
1e4d0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1e4e0 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
1e4f0 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
1e500 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
1e510 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
1e520 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
1e530 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
1e560 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
1e570 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
1e580 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e5a0 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
1e5b0 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ries */.  union 
1e5c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
1e5f0 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
1e600 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
1e610 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
1e640 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  xt */.    int i;
1e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
1e680 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63  value */.    Src
1e690 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
1e6c0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
1e6d0 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
1e6e0 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
1e6f0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
1e700 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
1e710 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b  rences */.  } u;
1e720 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
1e730 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
1e740 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1e750 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
1e760 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e770 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
1e780 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
1e790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1e7a0 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
1e7b0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1e7c0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1e7d0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
1e7e0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
1e7f0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
1e800 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
1e810 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  t*);../*.** Retu
1e820 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
1e830 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
1e840 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
1e850 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
1e860 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
1e870 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
1e880 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
1e890 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
1e8a0 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
1e8b0 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
1e8c0 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
1e8d0 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
1e8e0 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
1e8f0 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
1e900 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
1e910 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
1e920 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
1e930 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1e940 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1e950 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
1e960 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
1e970 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
1e980 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
1e990 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
1e9a0 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
1e9b0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1e9c0 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
1e9d0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
1e9e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e9f0 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
1ea00 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
1ea10 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
1ea20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ea30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
1ea40 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
1ea50 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
1ea60 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1ea80 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
1ea90 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
1eaa0 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
1eab0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1eac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
1ead0 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
1eae0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
1eaf0 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
1eb00 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1eb10 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
1eb20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
1eb30 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
1eb40 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
1eb50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
1eb60 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
1eb70 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
1eb80 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20   char *zErr;    
1eb90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
1eba0 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
1ebb0 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
1ebc0 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
1ebd0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d  .};../*.** Assum
1ebe0 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
1ebf0 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
1ec00 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
1ec10 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
1ec20 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
1ec30 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
1ec40 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
1ec50 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
1ec60 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1ec70 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec90 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
1eca0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
1ecb0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
1ece0 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
1ecf0 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
1ed00 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
1ed50 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
1ed60 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
1ed70 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
1ed80 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
1ed90 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
1eda0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
1edb0 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
1edc0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
1edd0 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
1ede0 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
1edf0 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
1ee00 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
1ee10 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
1ee20 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
1ee30 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
1ee40 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
1ee50 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
1ee60 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
1ee70 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
1ee80 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
1ee90 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
1eea0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
1eeb0 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
1eec0 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
1eed0 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
1eee0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
1eef0 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
1ef00 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
1ef10 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
1ef20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
1ef30 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
1ef40 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1ef50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1ef60 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
1ef70 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
1ef80 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a  r(__LINE__).../*
1ef90 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
1efa0 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
1efb0 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
1efc0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
1efd0 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
1efe0 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
1eff0 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
1f000 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
1f010 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
1f020 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
1f030 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
1f040 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51  an alisse for SQ
1f050 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1f060 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
1f070 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1f080 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
1f090 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1f0a0 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
1f0b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1f0c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1f0d0 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
1f0e0 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
1f0f0 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
1f100 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
1f110 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
1f120 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
1f130 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
1f140 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
1f150 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1f160 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
1f170 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
1f180 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
1f190 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
1f1a0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
1f1b0 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
1f1c0 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
1f1d0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1f1e0 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
1f1f0 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
1f200 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
1f210 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
1f220 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
1f230 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
1f240 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
1f250 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
1f260 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
1f270 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
1f280 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
1f290 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
1f2a0 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
1f2b0 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
1f2c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
1f2d0 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
1f2e0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1f2f0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f300 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# 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 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
1f330 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1f340 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1f350 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
1f360 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
1f370 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1f380 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1f390 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
1f3a0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
1f3b0 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
1f3c0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1f3d0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1f3e0 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
1f3f0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
1f400 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1f410 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1f420 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
1f430 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
1f440 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
1f450 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1f460 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1f470 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
1f480 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
1f490 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
1f4a0 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
1f4b0 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
1f4c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f4d0 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
1f4e0 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
1f4f0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1f500 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
1f510 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
1f520 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1f530 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f540 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
1f550 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
1f560 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1f570 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
1f580 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
1f590 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f5a0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1f5b0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
1f5c0 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
1f5d0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1f5e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1f5f0 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
1f600 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
1f610 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1f620 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1f630 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
1f640 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1f650 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
1f660 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
1f670 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64  prototypes.*/.#d
1f680 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
1f690 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
1f6a0 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33  icmp.int sqlite3
1f6b0 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
1f6c0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
1f6d0 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
1f6e0 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
1f6f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
1f700 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
1f710 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
1f720 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
1f730 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69  *sqlite3Malloc(i
1f740 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1f750 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74  e3MallocZero(int
1f760 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1f770 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
1f780 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ite3*, int);.voi
1f790 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
1f7a0 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
1f7b0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
1f7c0 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
1f7d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1f7e0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1f7f0 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
1f800 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1f810 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1f820 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
1f830 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1f840 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
1f850 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
1f860 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  void *, int);.vo
1f870 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
1f880 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
1f890 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  void *, int);.vo
1f8a0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
1f8b0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1f8c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
1f8d0 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
1f8e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
1f8f0 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
1f900 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
1f910 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d  *sqlite3ScratchM
1f920 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1f930 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46   sqlite3ScratchF
1f940 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
1f950 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
1f960 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
1f970 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
1f980 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
1f990 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
1f9a0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f9b0 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
1f9c0 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
1f9d0 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
1f9e0 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid));.int sqlit
1f9f0 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
1fa00 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
1fa10 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
1fa20 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
1fa30 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
1fa40 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
1fa50 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
1fa60 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
1fa70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
1fa80 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
1fa90 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
1faa0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
1fab0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
1fac0 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
1fad0 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
1fae0 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
1faf0 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
1fb00 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
1fb10 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
1fb20 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
1fb30 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
1fb40 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
1fb50 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
1fb60 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
1fb70 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1fb80 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
1fb90 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
1fba0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
1fbb0 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
1fbc0 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
1fbd0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1fbe0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
1fbf0 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20         .#else.# 
1fc00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1fc10 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1fc20 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
1fc30 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
1fc40 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1fc50 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
1fc60 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1fc70 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
1fc80 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
1fc90 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
1fca0 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
1fcb0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1fcc0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1fcd0 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
1fce0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1fcf0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1fd00 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
1fd10 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1fd20 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
1fd30 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
1fd40 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
1fd50 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
1fd60 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1fd70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fd80 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
1fd90 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1fda0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
1fdb0 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
1fdc0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
1fdd0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
1fde0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
1fdf0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
1fe00 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
1fe10 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
1fe20 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
1fe30 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
1fe40 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1fe50 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
1fe60 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
1fe70 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
1fe80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1fe90 33 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20  3StatusAdd(int, 
1fea0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1feb0 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c  e3StatusSet(int,
1fec0 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20   int);..#ifndef 
1fed0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
1fee0 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
1fef0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
1ff00 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
1ff10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
1ff20 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
1ff30 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1ff40 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1ff50 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
1ff60 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
1ff70 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
1ff80 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
1ff90 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
1ffa0 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
1ffb0 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
1ffc0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
1ffd0 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
1ffe0 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
1fff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
20000 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
20010 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
20020 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
20030 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20040 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
20050 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
20060 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
20070 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
20080 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
20090 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  };..#define SQLI
200a0 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
200b0 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20  AL 0x01.#define 
200c0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
200d0 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64  LFUNC  0x02.void
200e0 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
200f0 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
20100 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
20110 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c  _list);.void sql
20120 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
20130 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
20140 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
20150 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
20160 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
20170 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
20180 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
20190 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
201a0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
201b0 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ist);.char *sqli
201c0 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69  te3MAppendf(sqli
201d0 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74  te3*,char*,const
201e0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66   char*,...);.#if
201f0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
20200 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
20210 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
20220 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
20230 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
20240 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
20250 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
20260 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
20270 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
20280 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
20290 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  har*);.#endif../
202a0 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74  * Output formatt
202b0 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54  ing for SQLITE_T
202c0 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20  ESTCTRL_EXPLAIN 
202d0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
202e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45  QLITE_ENABLE_TRE
202f0 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69  E_EXPLAIN).  voi
20300 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
20310 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20  Begin(Vdbe*);.  
20320 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
20330 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c  ainPrintf(Vdbe*,
20340 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
20350 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  .);.  void sqlit
20360 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65  e3ExplainNL(Vdbe
20370 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20380 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64  e3ExplainPush(Vd
20390 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
203a0 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56  ite3ExplainPop(V
203b0 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
203c0 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69  lite3ExplainFini
203d0 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
203e0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
203f0 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65  Select(Vdbe*, Se
20400 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  lect*);.  void s
20410 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
20420 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b  r(Vdbe*, Expr*);
20430 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20440 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56  xplainExprList(V
20450 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  dbe*, ExprList*)
20460 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
20470 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61  sqlite3VdbeExpla
20480 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23  nation(Vdbe*);.#
20490 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
204a0 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69  lite3ExplainBegi
204b0 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
204c0 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65  lite3ExplainSele
204d0 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  ct(A,B).# define
204e0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
204f0 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  xpr(A,B).# defin
20500 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
20510 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20  ExprList(A,B).# 
20520 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
20530 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23  plainFinish(X).#
20540 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
20550 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58  dbeExplanation(X
20560 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  ) 0.#endif...voi
20570 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
20580 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
20590 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
205a0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
205b0 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
205c0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
205d0 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c  *, ...);.int sql
205e0 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
205f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
20600 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
20610 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
20620 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
20630 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
20640 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
20650 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
20660 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
20670 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
20680 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
20690 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
206a0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
206b0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
206c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
206d0 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
206e0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
206f0 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
20700 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
20710 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
20720 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
20730 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78  ache(Parse*);.Ex
20740 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
20750 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
20760 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
20770 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
20780 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
20790 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
207a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
207b0 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
207c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
207d0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
207e0 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
207f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
20800 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  pr*, Expr*, cons
20810 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
20820 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
20830 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
20840 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
20850 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
20860 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
20870 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  t*, Token*);.voi
20880 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
20890 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
208a0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
208b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
208c0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
208d0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
208e0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
208f0 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
20900 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  rList*,Expr*);.v
20910 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
20920 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
20930 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
20940 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
20950 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
20960 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
20970 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29  List*,ExprSpan*)
20980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
20990 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
209a0 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
209b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
209c0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
209d0 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
209e0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
209f0 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
20a00 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  , char**);.void 
20a10 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
20a20 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
20a30 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
20a40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
20a50 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
20a60 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  nection(sqlite3*
20a70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
20a80 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71  esetOneSchema(sq
20a90 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
20aa0 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73  d sqlite3Collaps
20ab0 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73  eDatabaseArray(s
20ac0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
20ad0 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65  qlite3BeginParse
20ae0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
20af0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
20b00 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
20b10 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65  sqlite3*);.Table
20b20 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
20b30 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
20b40 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
20b50 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
20b60 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
20b70 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71   int);.Index *sq
20b80 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
20b90 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31  ndex(Table*);.i1
20ba0 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f  6 sqlite3ColumnO
20bb0 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69  fIndex(Index*, i
20bc0 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
20bd0 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
20be0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
20bf0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
20c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20c10 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
20c20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
20c30 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
20c40 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
20c50 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
20c60 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
20c70 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
20c80 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20c90 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
20ca0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
20cb0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
20cc0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54  qlite3AddColumnT
20cd0 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ype(Parse*,Token
20ce0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20cf0 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
20d00 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
20d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20d20 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
20d30 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
20d40 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
20d50 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
20d60 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
20d70 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
20d80 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
20d90 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
20da0 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
20db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20dc0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
20dd0 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
20de0 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
20df0 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
20e00 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20e10 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
20e20 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65  e3CodeOnce(Parse
20e30 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
20e40 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
20e50 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73  _TEST.# define s
20e60 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
20e70 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
20e80 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
20e90 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
20ea0 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
20eb0 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
20ec0 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
20ed0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
20ee0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
20ef0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
20f00 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
20f10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
20f20 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
20f30 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
20f40 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
20f50 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
20f60 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
20f70 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
20f80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
20f90 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
20fa0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53  int,int*);..RowS
20fb0 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
20fc0 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
20fd0 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
20fe0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20ff0 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
21000 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
21010 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
21020 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
21030 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
21040 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
21050 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
21060 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
21070 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
21080 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
21090 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
210a0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
210b0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63  en*,Token*,Selec
210c0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
210d0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
210e0 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
210f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
21100 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21110 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
21120 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
21130 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
21140 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
21150 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
21160 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
21170 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   0.#endif..#if S
21180 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
21190 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69  ED>30.  int sqli
211a0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
211b0 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69  (yDbMask);.#endi
211c0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  f.void sqlite3Dr
211d0 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
211e0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
211f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21200 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
21210 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
21220 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21230 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
21240 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
21250 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
21260 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
21270 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
21280 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
21290 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
212a0 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
212b0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
212c0 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
212d0 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
212e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
212f0 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
21300 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
21310 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
21320 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f  End(X).#endif.vo
21330 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
21340 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
21350 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
21360 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
21370 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
21380 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
21390 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
213a0 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
213b0 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
213c0 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
213d0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
213e0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
213f0 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
21400 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
21410 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
21420 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
21430 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
21440 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
21450 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
21460 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
21470 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
21480 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
21490 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
214a0 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
214b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
214c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
214d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214f0 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
21500 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
21510 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
21520 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
21530 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
21540 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
21550 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
21560 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
21570 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
21580 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
21590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
215a0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
215b0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
215c0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
215d0 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
215e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
215f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
21600 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
21610 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
21620 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
21630 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
21640 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
21650 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
21660 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
21670 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
21680 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20  ,char**);.Index 
21690 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
216a0 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
216b0 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
216c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
216d0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216f0 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
21700 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21710 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
21720 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
21730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
21740 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
21750 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
21760 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
21770 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
21780 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
21790 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
217a0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
217b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217c0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
217d0 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
217e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
217f0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
21800 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
21810 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
21820 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
21830 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
21840 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
21850 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
21860 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
21870 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
21880 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
21890 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
218a0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
218b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
218c0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
218d0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
218e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
218f0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
21900 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
21910 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
21920 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
21930 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
21940 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
21950 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
21960 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
21970 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
21980 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
21990 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
219a0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
219b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
219c0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
219d0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
219e0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
219f0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
21a00 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
21a10 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
21a20 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
21a30 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
21a40 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
21a50 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
21a60 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
21a70 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
21a80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
21a90 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
21aa0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21ab0 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
21ac0 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
21ad0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43  nt sqlite3WhereC
21ae0 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65  ontinueLabel(Whe
21af0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
21b00 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c  lite3WhereBreakL
21b10 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
21b20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
21b30 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72  reOkOnePass(Wher
21b40 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69  eInfo*, int*);.i
21b50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
21b60 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
21b70 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
21b80 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
21b90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21ba0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
21bb0 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
21bc0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
21bd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21be0 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
21bf0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
21c00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21c10 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
21c20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
21c30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21c40 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
21c50 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
21c60 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
21c70 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Pop(Parse*);.voi
21c80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
21c90 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
21ca0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21cb0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
21cc0 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
21cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21ce0 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
21cf0 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
21d00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21d10 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
21d20 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
21d30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21d40 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
21d50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
21d60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21d70 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
21d80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
21d90 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
21da0 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
21db0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
21dc0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
21dd0 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
21de0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
21df0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21e00 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
21e10 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
21e20 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
21e30 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c  te3ExprCodeExprL
21e40 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
21e50 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  List*, int, u8);
21e60 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21e70 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
21e80 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
21e90 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
21ea0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
21eb0 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
21ec0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
21ed0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
21ee0 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ms */.void sqlit
21ef0 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
21f00 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
21f10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21f20 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
21f30 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
21f40 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
21f50 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
21f60 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21f70 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
21f80 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
21f90 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
21fa0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
21fb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
21fc0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
21fd0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
21fe0 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
21ff0 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75  ,int isView,stru
22000 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
22010 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
22020 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
22030 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22040 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
22050 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
22060 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
22070 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
22080 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
22090 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
220a0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
220b0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
220c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
220d0 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
220e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
220f0 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
22100 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
22110 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
22120 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
22130 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
22140 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
22150 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
22160 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22170 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
22180 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
22190 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
221a0 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
221b0 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78  esExpr(Expr*, Ex
221c0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
221d0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
221e0 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
221f0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
22200 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22210 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
22220 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
22230 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
22240 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
22250 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
22260 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
22270 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
22280 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22290 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
222a0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
222b0 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
222c0 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  reState(void);.v
222d0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
222e0 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
222f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22300 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
22310 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
22320 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
22330 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
22340 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
22350 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
22360 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
22370 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
22380 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22390 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61  ite3CommitTransa
223a0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
223b0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
223c0 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ackTransaction(P
223d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
223e0 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61  ite3Savepoint(Pa
223f0 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  rse*, int, Token
22400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22410 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
22420 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64  sqlite3 *);.void
22430 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74   sqlite3LeaveMut
22440 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65  exAndCloseZombie
22450 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
22460 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
22470 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e  stant(Expr*);.in
22480 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
22490 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45  onstantNotJoin(E
224a0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
224b0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
224c0 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a  OrFunction(Expr*
224d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
224e0 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
224f0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
22500 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
22510 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
22520 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22530 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
22540 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
22550 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
22560 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
22570 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22580 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
22590 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
225a0 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
225b0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
225c0 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  u8,u8,u8);.void 
225d0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
225e0 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
225f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22600 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69  t, int, int*);.i
22610 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
22620 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
22630 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
22640 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
22650 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
22660 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
22670 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
22680 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
22690 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
226a0 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
226b0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
226c0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
226d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
22700 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
22710 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
22720 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
22730 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
22740 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
22750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
22760 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
22770 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
22780 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c  , int, int, u8*,
22790 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
227a0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
227b0 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
227c0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
227d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
227e0 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
227f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
22800 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
22810 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
22820 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
22830 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
22840 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
22850 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
22860 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
22870 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
22880 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
22890 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
228a0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
228b0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
228c0 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
228d0 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
228e0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
228f0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
22900 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
22910 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22920 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
22930 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
22940 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
22950 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
22960 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
22970 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
22980 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
22990 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
229a0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63  void sqlite3Func
229b0 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65  DefInsert(FuncDe
229c0 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a  fHash*, FuncDef*
229d0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
229e0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
229f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
22a00 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c  har*,int,int,u8,
22a10 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22a20 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
22a30 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
22a40 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
22a50 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
22a60 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
22a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
22a80 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63  gisterGlobalFunc
22a90 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
22aa0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
22ab0 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
22ac0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
22ad0 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
22ae0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
22af0 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
22b00 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
22b10 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
22b20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
22b30 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22b40 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
22b50 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
22b60 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
22b70 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
22b80 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
22b90 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
22ba0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
22bb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
22bc0 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
22bd0 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
22be0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
22bf0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
22c20 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22c30 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
22c40 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
22c50 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
22c60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22c70 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
22c80 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
22c90 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
22ca0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
22cb0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
22cc0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
22cd0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
22ce0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
22cf0 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
22d00 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
22d10 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
22d20 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
22d30 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
22d40 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22d50 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
22d60 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
22d70 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
22d80 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
22d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
22db0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
22dc0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
22dd0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
22de0 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
22df0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
22e00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
22e10 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
22e20 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
22e30 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
22e40 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
22e50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
22e60 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
22e70 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
22e80 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
22e90 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
22ea0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
22eb0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
22ec0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
22ed0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
22ee0 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
22ef0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
22f00 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
22f30 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
22f40 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
22f50 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
22f60 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
22f70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
22f80 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
22f90 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
22fa0 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
22fb0 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
22fc0 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
22fd0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
22fe0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
22ff0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
23000 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
23010 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
23020 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23030 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
23040 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
23050 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
23060 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
23070 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
23080 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
23090 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
230a0 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
230b0 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
230c0 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
230d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
230e0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
230f0 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
23100 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23110 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
23120 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
23130 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
23140 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
23150 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23160 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
23170 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
23180 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
23190 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
231a0 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
231b0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
231c0 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
231d0 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
231e0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
231f0 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
23200 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
23210 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
23220 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23230 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
23240 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
23250 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
23260 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
23270 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
23280 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
23290 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
232a0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
232b0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
232c0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
232d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
232e0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
232f0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
23300 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23310 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
23320 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
23330 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
23340 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
23350 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
23360 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
23370 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
23380 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
23390 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
233a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
233b0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
233c0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
233d0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
233e0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
233f0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
23400 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
23410 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
23420 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
23430 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
23440 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
23450 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
23460 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
23470 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
23480 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
23490 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
234a0 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
234b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
234c0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
234d0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
234e0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
234f0 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
23500 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
23510 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
23520 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
23530 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
23540 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
23550 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
23560 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
23570 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
23580 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
23590 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
235a0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
235b0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
235c0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
235d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
235e0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
235f0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
23600 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
23610 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
23620 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
23630 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
23640 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
23650 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
23660 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
23670 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
23680 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
23690 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
236a0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
236b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
236c0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
236d0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
236e0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
236f0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
23700 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
23710 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
23720 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
23730 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
23740 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
23750 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
23760 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
23770 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
23780 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
23790 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
237a0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
237b0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
237c0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
237d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
237e0 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
237f0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
23800 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
23810 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71  );.#endif.u64 sq
23820 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
23830 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a  (LogEst);../*.**
23840 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
23850 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
23860 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
23870 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
23880 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
23890 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
238a0 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
238b0 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
238c0 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
238d0 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75  file.  Code shou
238e0 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f  ld use the MACRO
238f0 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73   forms below, as
23900 20 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65   the Varint32 ve
23910 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f  rsions.** are co
23920 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68  ded to assume th
23930 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61  e single byte ca
23940 73 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61  se is already ha
23950 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a  ndled (which .**
23960 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20   the MACRO form 
23970 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  does)..*/.int sq
23980 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
23990 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
239a0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
239b0 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69  PutVarint32(unsi
239c0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29  gned char*, u32)
239d0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
239e0 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
239f0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
23a00 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
23a10 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
23a20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
23a30 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
23a40 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
23a50 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
23a60 65 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65  e header of a re
23a70 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66  cord consists of
23a80 20 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69   a sequence vari
23a90 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
23aa0 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69  gers..** These i
23ab0 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f  ntegers are almo
23ac0 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20  st always small 
23ad0 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20  and are encoded 
23ae0 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  as a single byte
23af0 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ..** The followi
23b00 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61  ng macros take a
23b10 64 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61  dvantage this fa
23b20 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  ct to provide a 
23b30 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61  fast encode.** a
23b40 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65  nd decode of the
23b50 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72   integers in a r
23b60 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49  ecord header.  I
23b70 74 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20  t is faster for 
23b80 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61  the common.** ca
23b90 73 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74  se where the int
23ba0 65 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65  eger is a single
23bb0 20 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20   byte.  It is a 
23bc0 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68  little slower wh
23bd0 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  en the.** intege
23be0 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65  r is two or more
23bf0 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65   bytes.  But ove
23c00 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65  rall it is faste
23c10 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  r..**.** The fol
23c20 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f  lowing expressio
23c30 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e  ns are equivalen
23c40 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  t:.**.**     x =
23c50 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
23c60 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a  t32( A, &B );.**
23c70 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
23c80 50 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  PutVarint32( A, 
23c90 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  B );.**.**     x
23ca0 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20   = getVarint32( 
23cb0 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78  A, B );.**     x
23cc0 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20   = putVarint32( 
23cd0 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64  A, B );.**.*/.#d
23ce0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
23cf0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
23d00 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
23d10 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
23d20 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
23d30 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
23d40 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
23d50 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
23d60 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
23d70 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
23d80 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
23d90 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
23da0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
23db0 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  32((A),(B))).#de
23dc0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
23dd0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
23de0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
23df0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
23e00 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
23e10 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
23e20 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
23e30 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
23e40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
23e50 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
23e60 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
23e70 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
23e80 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
23e90 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
23ea0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
23eb0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
23ec0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
23ed0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
23ee0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
23ef0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
23f00 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
23f10 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
23f20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
23f30 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
23f40 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
23f50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
23f60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23f70 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20  Error(sqlite3*, 
23f80 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
23f90 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,...);.void *sql
23fa0 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
23fb0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
23fc0 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
23fd0 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
23fe0 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
23ff0 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
24000 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
24010 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
24020 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
24030 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
24040 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71   .const char *sq
24050 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
24060 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
24070 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
24080 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
24090 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
240a0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
240b0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
240c0 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
240d0 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
240e0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
240f0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
24100 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
24110 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
24120 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
24130 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
24140 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
24150 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
24160 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
24170 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
24180 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
24190 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
241a0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
241b0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
241c0 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
241d0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
241e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
241f0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
24200 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
24210 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
24220 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
24230 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
24240 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
24250 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
24260 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
24270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
24280 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
24290 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
242a0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
242b0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
242c0 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
242d0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
242e0 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
242f0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
24300 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
24310 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
24320 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
24330 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
24340 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
24350 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
24360 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24370 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
24380 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
24390 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
243a0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
243b0 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
243c0 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
243d0 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
243e0 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
243f0 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
24400 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
24410 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
24420 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
24430 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
24440 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
24450 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
24460 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
24470 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
24480 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
24490 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
244a0 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
244b0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
244c0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
244d0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
244e0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
244f0 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
24500 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
24510 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
24520 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
24530 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
24540 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
24550 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
24560 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
24570 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
24580 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
24590 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
245a0 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
245b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
245c0 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
245d0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
245e0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
245f0 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
24600 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
24610 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
24620 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
24630 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
24640 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
24650 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
24660 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
24670 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
24680 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
24690 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
246a0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
246b0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
246c0 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
246d0 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
246e0 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
246f0 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
24700 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
24710 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
24720 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
24730 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24740 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
24750 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
24760 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24770 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
24780 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
24790 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
247a0 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
247b0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
247c0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
247d0 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
247e0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
247f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
24800 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
24810 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
24820 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
24830 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
24840 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
24850 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
24860 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
24870 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
24880 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
24890 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
248a0 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
248b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
248c0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
248d0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
248e0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
248f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24900 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
24910 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24920 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
24930 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
24940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
24950 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
24960 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
24970 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24980 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
24990 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
249a0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
249b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
249c0 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
249d0 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
249e0 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
249f0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
24a00 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
24a10 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
24a20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
24a30 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
24a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
24a50 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
24a60 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
24a70 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24a80 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
24a90 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
24aa0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
24ab0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
24ac0 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
24ad0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
24ae0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24af0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
24b00 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
24b10 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
24b20 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
24b30 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
24b40 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69  char*, u8*);.voi
24b50 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
24b60 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
24b70 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
24b80 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
24b90 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
24ba0 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
24bb0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
24bc0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
24bd0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
24be0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
24bf0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
24c00 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
24c10 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
24c20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
24c30 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
24c40 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
24c50 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
24c60 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
24c70 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
24c80 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
24c90 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
24ca0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
24cb0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
24cc0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
24cd0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
24ce0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
24cf0 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
24d00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
24d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24d20 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
24d30 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
24d40 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
24d50 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
24d60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
24d70 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
24d80 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
24d90 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
24da0 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
24db0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74  sqlite3*,int,int
24dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b  );.void sqlite3K
24dd0 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49  eyInfoUnref(KeyI
24de0 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
24df0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65  sqlite3KeyInfoRe
24e00 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
24e10 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
24e20 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73  InfoOfIndex(Pars
24e30 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  e*, Index*);.#if
24e40 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
24e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
24e60 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
24e70 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
24e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
24e90 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
24ea0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
24eb0 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
24ec0 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  , .  void (*)(sq
24ed0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
24ee0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
24ef0 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
24f00 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
24f10 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
24f20 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
24f30 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
24f40 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
24f50 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
24f60 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  or.);.int sqlite
24f70 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
24f80 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
24f90 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
24fa0 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
24fb0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
24fc0 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
24fd0 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ccum*, char*, in
24fe0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24ff0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
25000 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
25010 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
25020 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25030 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74  ccumAppendAll(St
25040 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
25050 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25060 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53 74  e3AppendSpace(St
25070 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68  rAccum*,int);.ch
25080 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
25090 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
250a0 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
250b0 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
250c0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
250d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
250e0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
250f0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
25100 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
25110 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
25120 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
25130 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
25140 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
25150 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
25160 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
25170 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
25180 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
25190 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
251a0 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20   u8 *);..#ifdef 
251b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
251c0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
251d0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
251e0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
251f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
25200 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50  4ProbeSetValue(P
25210 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
25220 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
25230 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29  pr*,u8,int,int*)
25240 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
25250 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  t4ValueFromExpr(
25260 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
25270 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
25280 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
25290 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28  3Stat4ProbeFree(
252a0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29  UnpackedRecord*)
252b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
252c0 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33  t4Column(sqlite3
252d0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
252e0 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65  int, int, sqlite
252f0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64  3_value**);.#end
25300 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
25310 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
25320 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
25330 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
25340 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
25350 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
25360 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
25370 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
25380 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
25390 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
253a0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
253b0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
253c0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
253d0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
253e0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
253f0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
25400 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
25410 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
25420 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
25430 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
25440 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
25450 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
25460 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
25470 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
25480 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25490 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
254a0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
254b0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
254c0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
254d0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
254e0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
254f0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
25500 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
25510 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
25520 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
25530 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
25540 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
25550 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
25560 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
25570 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
25580 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
25590 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
255a0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
255b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
255c0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
255d0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
255e0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
255f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25600 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
25610 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
25620 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
25630 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25640 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
25650 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25660 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
25670 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25680 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
25690 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
256a0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
256b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
256c0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
256d0 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
256e0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
256f0 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
25700 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
25710 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
25720 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
25730 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
25740 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
25750 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
25760 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
25770 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
25780 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
25790 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
257a0 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
257b0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
257c0 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
257d0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
257e0 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
257f0 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
25800 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
25810 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
25820 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
25830 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
25840 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
25850 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
25860 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
25870 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
25880 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
25890 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
258a0 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
258b0 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
258c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
258d0 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
258e0 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
258f0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
25900 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25910 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
25920 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
25930 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
25940 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69  s==0).#endif.voi
25950 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
25960 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
25970 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
25980 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
25990 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
259a0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
259b0 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
259c0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
259d0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
259e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
259f0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
25a00 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25a10 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
25a20 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
25a30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
25a40 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
25a50 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
25a60 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
25a70 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
25a80 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
25a90 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
25aa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
25ab0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
25ac0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
25ad0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
25ae0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
25af0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
25b00 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
25b10 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
25b20 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
25b30 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
25b40 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
25b50 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
25b60 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
25b70 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
25b80 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
25b90 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
25ba0 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
25bb0 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
25bc0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
25bd0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
25be0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
25bf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
25c00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
25c10 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
25c20 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
25c30 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
25c40 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
25c50 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
25c60 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
25c70 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
25c80 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
25c90 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
25ca0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
25cb0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
25cc0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
25cd0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
25ce0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
25cf0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
25d00 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
25d10 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
25d20 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
25d30 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
25d40 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
25d50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25d60 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
25d70 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
25d80 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
25d90 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
25da0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
25db0 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
25dc0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
25dd0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
25de0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
25df0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
25e00 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
25e10 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
25e20 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
25e30 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
25e40 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
25e50 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
25e60 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
25e70 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
25e80 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
25e90 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
25ea0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
25eb0 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
25ec0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
25ed0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
25ee0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
25ef0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
25f00 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
25f10 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
25f20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
25f30 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
25f40 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
25f50 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
25f60 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
25f70 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
25f80 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
25f90 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
25fa0 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
25fb0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
25fc0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
25fd0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
25fe0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
25ff0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
26000 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
26010 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
26020 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
26030 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76  lity is .** prov
26040 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
26050 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
26060 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
26070 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
26080 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
26090 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
260a0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
260b0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
260c0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
260d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
260e0 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
260f0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
26100 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
26110 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
26120 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
26130 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
26140 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26150 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
26160 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
26170 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
26180 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
26190 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
261a0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
261b0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
261c0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
261d0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
261e0 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
261f0 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
26200 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
26210 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26220 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
26230 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
26240 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
26250 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
26260 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
26270 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
26280 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26290 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
262a0 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
262b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
262c0 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
262d0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
262e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
262f0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
26300 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
26310 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
26320 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
26330 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
26340 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
26350 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
26360 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
26370 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
26380 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
26390 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
263a0 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
263b0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
263c0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
263d0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
263e0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
263f0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
26400 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
26410 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
26420 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
26430 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
26440 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
26450 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
26460 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
26470 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
26480 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
26490 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
264a0 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
264b0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
264c0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
264d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
264e0 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
264f0 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
26500 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26510 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
26520 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
26530 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
26540 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
26550 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
26560 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
26570 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26580 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
26590 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
265a0 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
265b0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
265c0 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  if..#define IN_I
265d0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
265e0 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
265f0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
26600 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
26610 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
26620 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64 65  _ASC       3.#de
26630 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
26640 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a  DEX_DESC      4.
26650 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
26660 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
26670 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a  Expr *, int*);..
26680 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
26690 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
266a0 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
266b0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
266c0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
266d0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
266e0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
266f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26700 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
26710 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
26720 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
26730 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
26740 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
26750 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
26760 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
26770 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
26780 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
26790 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
267a0 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
267b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
267c0 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
267d0 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
267e0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
267f0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
26800 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
26810 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
26820 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
26830 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
26840 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
26850 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  );..#if SQLITE_M
26860 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
26870 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
26880 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73  prSetHeight(Pars
26890 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
268a0 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  *p);.  int sqlit
268b0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
268c0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
268d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
268e0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
268f0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
26900 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26910 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c  ExprSetHeight(x,
26920 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
26930 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
26940 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
26950 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
26960 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
26970 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
26980 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
26990 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
269a0 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
269b0 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
269c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
269d0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
269e0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
269f0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
26a00 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
26a10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26a20 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
26a30 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
26a40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26a50 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
26a60 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
26a70 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
26a80 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
26a90 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
26aa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
26ab0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
26ac0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
26ad0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
26ae0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
26af0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26b00 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
26b10 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
26b20 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
26b30 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
26b40 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
26b50 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
26b60 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
26b70 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
26b80 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
26b90 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
26ba0 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
26bb0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
26bc0 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
26bd0 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
26be0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26bf0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
26c00 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
26c10 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
26c20 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
26c30 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
26c40 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
26c50 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
26c60 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64  LITE_EXTERN void
26c70 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63   (*sqlite3IoTrac
26c80 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
26c90 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
26ca0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
26cb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26cc0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
26cd0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
26ce0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
26cf0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
26d00 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
26d10 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
26d20 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
26d30 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
26d40 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
26d50 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
26d60 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
26d70 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
26d80 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
26d90 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
26da0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
26db0 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
26dc0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
26dd0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
26de0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
26df0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
26e00 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
26e10 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
26e20 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
26e30 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
26e40 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
26e50 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
26e60 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
26e70 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
26e80 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
26e90 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
26ea0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
26eb0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
26ec0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
26ed0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
26ee0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
26ef0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
26f00 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
26f10 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
26f20 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
26f30 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
26f40 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
26f50 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
26f60 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
26f70 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
26f80 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
26f90 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
26fa0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26fb0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
26fc0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
26fd0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
26fe0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
26ff0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
27000 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
27010 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
27020 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
27030 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
27040 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
27050 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
27060 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
27070 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
27080 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
27090 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
270a0 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
270b0 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
270c0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
270d0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
270e0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
270f0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
27100 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
27110 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
27120 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
27130 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
27140 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
27150 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
27160 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
27170 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
27180 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
27190 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
271a0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
271b0 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
271c0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
271d0 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  . .**.** All of 
271e0 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
271f0 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
27200 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
27210 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
27220 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
27230 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
27240 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
27250 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
27260 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
27270 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
27280 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
27290 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
272a0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
272b0 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
272c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
272d0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
272e0 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
272f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27300 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
27310 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
27320 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
27330 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
27340 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
27350 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
27360 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
27370 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
27380 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
27390 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
273a0 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
273b0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
273c0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
273d0 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67  DE  0x02  /* Mig
273e0 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
273f0 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f  kaside memory */
27400 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
27410 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
27420 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
27430 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
27440 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
27450 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
27460 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
27470 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
27480 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20  e MEMTYPE_DB    
27490 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73       0x10  /* Us
274a0 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  es sqlite3DbMall
274b0 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d  oc, not sqlite_m
274c0 61 6c 6c 6f 63 20 2a 2f 0a 0a 0a 23 69 66 20 28  alloc */...#if (
274d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
274e0 50 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65  PLE_SPI>0) && de
274f0 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
27500 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
27510 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
27520 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
27530 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  s used to hold t
27540 68 65 20 70 72 6f 63 65 73 73 20 49 44 0a 2a 2a  he process ID.**
27550 20 61 6e 64 20 72 65 74 75 72 6e 2d 62 79 2d 72   and return-by-r
27560 65 66 65 72 65 6e 63 65 20 6c 6f 63 6b 73 74 61  eference locksta
27570 74 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 53  te value.  The S
27580 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b  QLITE_FCNTL_LOCK
27590 53 54 41 54 45 5f 50 49 44 0a 2a 2a 20 72 65 71  STATE_PID.** req
275a0 75 69 72 65 73 20 74 68 65 20 34 74 68 20 61 72  uires the 4th ar
275b0 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
275c0 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 74  3_file_control t
275d0 6f 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  o be a pointer t
275e0 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  o an.** instance
275f0 20 6f 66 20 4c 6f 63 6b 73 74 61 74 65 50 49 44   of LockstatePID
27600 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 77 69 74   initialized wit
27610 68 20 61 20 4c 6f 63 6b 73 74 61 74 65 50 49 44  h a LockstatePID
27620 2e 70 69 64 20 76 61 6c 75 65 20 65 71 75 61 6c  .pid value equal
27630 0a 2a 2a 20 74 6f 20 61 20 70 72 6f 63 65 73 73  .** to a process
27640 20 49 44 20 74 6f 20 62 65 20 74 65 73 74 65 64   ID to be tested
27650 2c 20 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c  , or the special
27660 20 76 61 6c 75 65 20 53 51 4c 49 54 45 5f 4c 4f   value SQLITE_LO
27670 43 4b 53 54 41 54 45 5f 41 4e 59 50 49 44 0a 2a  CKSTATE_ANYPID.*
27680 2a 20 54 68 65 20 4c 6f 63 6b 73 74 61 74 65 2e  * The Lockstate.
27690 73 74 61 74 65 20 76 61 6c 75 65 20 69 73 20 61  state value is a
276a0 6c 77 61 79 73 20 73 65 74 20 74 6f 20 6f 6e 65  lways set to one
276b0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
276c0 67 20 76 61 6c 75 65 73 0a 2a 2a 20 77 68 65 6e  g values.** when
276d0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
276e0 6e 74 72 6f 6c 20 72 65 74 75 72 6e 73 3a 0a 2a  ntrol returns:.*
276f0 2a 20 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c  * .**   SQLITE_L
27700 4f 43 4b 53 54 41 54 45 5f 4f 46 46 20 20 20 20  OCKSTATE_OFF    
27710 6e 6f 20 61 63 74 69 76 65 20 73 71 6c 69 74 65  no active sqlite
27720 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63   file locks matc
27730 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
27740 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f  pid.**   SQLITE_
27750 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e 20 20 20 20  LOCKSTATE_ON    
27760 20 61 63 74 69 76 65 20 73 71 6c 69 74 65 20 66   active sqlite f
27770 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68 20  ile locks match 
27780 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70 69  the specified pi
27790 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f  d.**   SQLITE_LO
277a0 43 4b 53 54 41 54 45 5f 4e 4f 54 41 44 42 20 70  CKSTATE_NOTADB p
277b0 61 74 68 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  ath points to a 
277c0 66 69 6c 65 20 74 68 61 74 20 69 73 20 6e 6f 74  file that is not
277d0 20 61 6e 20 73 71 6c 69 74 65 20 64 62 20 66 69   an sqlite db fi
277e0 6c 65 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c  le.**   SQLITE_L
277f0 4f 43 4b 53 54 41 54 45 5f 45 52 52 4f 52 20 20  OCKSTATE_ERROR  
27800 70 61 74 68 20 77 61 73 20 6e 6f 74 20 76 61 69  path was not vai
27810 6c 64 20 6f 72 20 77 61 73 20 75 6e 72 65 61 64  ld or was unread
27820 61 62 6c 65 0a 2a 2f 0a 74 79 70 65 64 65 66 20  able.*/.typedef 
27830 73 74 72 75 63 74 20 4c 6f 63 6b 73 74 61 74 65  struct Lockstate
27840 50 49 44 20 4c 6f 63 6b 73 74 61 74 65 50 49 44  PID LockstatePID
27850 3b 0a 73 74 72 75 63 74 20 4c 6f 63 6b 73 74 61  ;.struct Locksta
27860 74 65 50 49 44 20 7b 0a 20 20 70 69 64 5f 74 20  tePID {.  pid_t 
27870 70 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  pid;            
27880 20 20 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20       /* Process 
27890 49 44 20 74 6f 20 74 65 73 74 20 2a 2f 0a 20 20  ID to test */.  
278a0 69 6e 74 20 73 74 61 74 65 3b 20 20 20 20 20 20  int state;      
278b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
278c0 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c  e state of the l
278d0 6f 63 6b 20 28 72 65 74 75 72 6e 20 76 61 6c 75  ock (return valu
278e0 65 29 20 2a 2f 0a 7d 3b 0a 0a 23 65 6e 64 69 66  e) */.};..#endif
278f0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c  ..#endif /* _SQL
27900 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a           ITEINT_H_ */.