/ Hex Artifact Content
Login

Artifact d8a9be2aa123a78c90ad4aba09b23e7dd3f8cc9f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
16b0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
16c0: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
16d0: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
16e0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
16f0: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1700: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1710: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1720: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1730: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1740: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1750: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23  ined(_MSC_VER).#
1760: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1770: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c  NOINLINE  __decl
1780: 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23  spec(noinline).#
1790: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53  else.#  define S
17a0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23  QLITE_NOINLINE.#
17b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
17c0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
17d0: 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65  FE macro must be
17e0: 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31   defined as 0, 1
17f0: 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61  , or 2..** 0 mea
1800: 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70  ns mutexes are p
1810: 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
1820: 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61  le and the libra
1830: 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74  ry is never.** t
1840: 68 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65  hreadsafe.  1 me
1850: 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ans the library 
1860: 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68  is serialized wh
1870: 69 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65  ich is the highe
1880: 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74  st.** level of t
1890: 68 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20  hreadsafety.  2 
18a0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
18b0: 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64  y is multithread
18c0: 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  ed - multiple.**
18d0: 20 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65   threads can use
18e0: 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20   SQLite as long 
18f0: 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64  as no two thread
1900: 73 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65  s try to use the
1910: 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73   same.** databas
1920: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20  e connection at 
1930: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a  the same time..*
1940: 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  *.** Older versi
1950: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
1960: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
1970: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
1980: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
1990: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a  hat for legacy..
19a0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
19b0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
19c0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
19d0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
19e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
19f0: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
1a00: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
1a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1a20: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
1a30: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
1a40: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
1a50: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
1a60: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
1a70: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
1a80: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
1a90: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
1aa0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
1ab0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
1ac0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
1ad0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
1ae0: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
1af0: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
1b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
1b10: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1b20: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
1b30: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   The SQLITE_DEFA
1b40: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61  ULT_MEMSTATUS ma
1b50: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1b60: 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30 20  ned as either 0 
1b70: 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65  or 1..** It dete
1b80: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
1b90: 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75 72  r not the featur
1ba0: 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a  es related to .*
1bb0: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
1bc0: 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61 76  MEMSTATUS are av
1bd0: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1be0: 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20  lt or not. This 
1bf0: 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20  value can.** be 
1c00: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72 75  overridden at ru
1c10: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
1c20: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
1c30: 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65   API..*/.#if !de
1c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
1c50: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
1c60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1c70: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1c80: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
1c90: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
1ca0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1cb0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
1cc0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
1cd0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
1ce0: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
1cf0: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
1d00: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
1d10: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1d20: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
1d30: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
1d40: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
1d50: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
1d60: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1d70: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
1d80: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
1d90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
1da0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
1db0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
1dc0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
1dd0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
1de0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
1df0: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
1e00: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
1e10: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
1e20: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
1e30: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
1e40: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
1e50: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
1e60: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
1e70: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
1e80: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
1e90: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
1ea0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
1eb0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
1ec0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
1ed0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
1ee0: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
1ef0: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
1f00: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
1f10: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
1f20: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
1f30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
1f40: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
1f50: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
1f60: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
1f70: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
1f80: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
1f90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1fa0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1fb0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1fc0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1fd0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1fe0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1ff0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2000: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2010: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2020: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2030: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2040: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2050: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2060: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2070: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
2080: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
2090: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
20a0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
20b0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
20c0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
20d0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
20e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20f0: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2100: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2110: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2120: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2130: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2140: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2150: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2160: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
2180: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
2190: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
21a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
21b0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
21c0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
21d0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
21e0: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
21f0: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2200: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2210: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2220: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2230: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2240: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2250: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2260: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2270: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
2280: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
2290: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
22a0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
22b0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
22c0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
22d0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
22e0: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
22f0: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2300: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2310: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2320: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2330: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2340: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2350: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2360: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2370: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
2380: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
2390: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
23a0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
23b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
23c0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
23d0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
23e0: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
23f0: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2400: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2410: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2420: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2430: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2440: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2450: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2460: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2470: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
2480: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
2490: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
24a0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
24b0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
24c0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
24d0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
24e0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
24f0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2500: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2510: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2520: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2530: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2540: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2550: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2560: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2570: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
2580: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
2590: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
25a0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
25b0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
25c0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25d0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
25e0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
25f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2600: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2610: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2620: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2640: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2650: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2660: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2670: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2680: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2690: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
26a0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
26b0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
26c0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
26d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
26e0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
26f0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2700: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2710: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2720: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2730: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2740: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2750: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2760: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2770: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2780: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2790: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
27a0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
27b0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
27c0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
27d0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
27e0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
27f0: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2800: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2810: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2820: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2830: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2840: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2850: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2860: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2870: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2880: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2890: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
28a0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
28b0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
28c0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
28d0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
28e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
28f0: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2900: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2910: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2920: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2930: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2940: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2950: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2960: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2970: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2980: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2990: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
29a0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
29b0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
29c0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
29d0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
29e0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
29f0: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2a00: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2a10: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2a20: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2a30: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2a40: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2a50: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2a60: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2a70: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2a80: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2a90: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2aa0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ab0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ac0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ad0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2ae0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2af0: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2b00: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2b10: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2b20: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b30: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2b40: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2b50: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2b60: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2b70: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2b80: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2b90: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2ba0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2bb0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2bc0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2bd0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
2be0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
2bf0: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
2c00: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
2c10: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
2c20: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
2c30: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
2c40: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
2c50: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
2c60: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
2c70: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
2c80: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
2c90: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
2ca0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
2cb0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
2cc0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
2cd0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
2ce0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
2cf0: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
2d00: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
2d10: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
2d20: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
2d30: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
2d40: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2d50: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2d60: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2d70: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
2d80: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
2d90: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
2da0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
2db0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
2dc0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
2dd0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
2de0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
2df0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
2e00: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
2e10: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
2e20: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
2e30: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
2e40: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
2e50: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
2e60: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
2e70: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
2e80: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
2e90: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
2ea0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
2eb0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
2ec0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
2ed0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
2ee0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
2ef0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
2f00: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
2f10: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
2f20: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
2f30: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
2f40: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
2f50: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
2f60: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
2f70: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
2f80: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
2f90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
2fa0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
2fb0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
2fc0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
2fd0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
2fe0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
2ff0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3000: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3010: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3020: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3030: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3040: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3050: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3060: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3070: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3080: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3090: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
30a0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
30b0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
30c0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
30d0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
30e0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
30f0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3100: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3110: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3120: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3130: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
3140: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
3150: 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65   input is a inte
3160: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
3170: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
3180: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
3190: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
31a0: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
31b0: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
31c0: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
31d0: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
31e0: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
31f0: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
3200: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
3210: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
3220: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
3230: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
3240: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
3250: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
3260: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
3270: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
3280: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
3290: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
32a0: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
32b0: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
32c0: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
32d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
32e0: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
32f0: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
3300: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
3310: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
3320: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
3330: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
3340: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
3350: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
3360: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
3370: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
3380: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
3390: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
33a0: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
33b0: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
33c0: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
33d0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
33e0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
33f0: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
3400: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
3410: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
3420: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
3430: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
3440: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
3450: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
3460: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
3470: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
3480: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
3490: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
34a0: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
34b0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
34c0: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
34d0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
34e0: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
34f0: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
3500: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3510: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
3520: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
3530: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3540: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
3550: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
3560: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
3570: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
3580: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
3590: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
35a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
35b0: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
35c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
35d0: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
35e0: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
35f0: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
3600: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3610: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
3620: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3630: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
3640: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
3650: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
3660: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
3670: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
3680: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
3690: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
36a0: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
36b0: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
36c0: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
36d0: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
36e0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
36f0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
3700: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
3710: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3720: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
3730: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3740: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
3750: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
3760: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3770: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
3780: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
3790: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
37a0: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
37b0: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
37c0: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
37d0: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
37e0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
37f0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
3800: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
3810: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
3820: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
3830: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
3840: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
3850: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
3860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
3870: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
3880: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
3890: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38a0: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
38b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
38c0: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
38d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
38e0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
38f0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
3900: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
3910: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
3920: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
3930: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
3940: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
3950: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
3960: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
3970: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
3980: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
3990: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
39a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
39b0: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
39c0: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
39d0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
39e0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
39f0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
3a00: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
3a10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3a20: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
3a30: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3a40: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
3a50: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3a60: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
3a70: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
3a80: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3a90: 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64  * GCC does not d
3aa0: 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74  efine the offset
3ab0: 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65  of() macro so we
3ac0: 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69  'll have to do i
3ad0: 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a  t.** ourselves..
3ae0: 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65  */.#ifndef offse
3af0: 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73  tof.#define offs
3b00: 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46  etof(STRUCTURE,F
3b10: 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68  IELD) ((int)((ch
3b20: 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45  ar*)&((STRUCTURE
3b30: 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65  *)0)->FIELD)).#e
3b40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
3b50: 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69  os to compute mi
3b60: 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75  nimum and maximu
3b70: 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73  m of two numbers
3b80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e  ..*/.#define MIN
3b90: 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28  (A,B) ((A)<(B)?(
3ba0: 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65 20  A):(B)).#define 
3bb0: 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42  MAX(A,B) ((A)>(B
3bc0: 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a  )?(A):(B))../*.*
3bd0: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
3be0: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
3bf0: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
3c00: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
3c10: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
3c20: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
3c30: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
3c40: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
3c50: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
3c60: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
3c70: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
3c80: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3c90: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
3ca0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
3cb0: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
3cc0: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
3cd0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
3ce0: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
3cf0: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
3d00: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
3d10: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
3d20: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
3d30: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
3d40: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
3d50: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
3d60: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
3d70: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
3d80: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
3d90: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
3da0: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
3db0: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
3dc0: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
3dd0: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
3de0: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
3df0: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3e10: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
3e20: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
3e30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
3e40: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
3e50: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
3e60: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
3e70: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
3e80: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e90: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
3ea0: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
3eb0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3ec0: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
3ed0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
3ee0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
3ef0: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
3f00: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
3f10: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
3f20: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
3f30: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3f40: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
3f50: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
3f60: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3f70: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
3f80: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3f90: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
3fa0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
3fb0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
3fc0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3fd0: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
3fe0: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
3ff0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4000: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4010: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4020: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4030: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4040: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4050: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4060: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
4070: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
4080: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
4090: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
40a0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
40b0: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
40c0: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
40d0: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
40e0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
40f0: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4100: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4110: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4120: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4130: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4140: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4150: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4160: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4170: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
4180: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
4190: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
41a0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
41b0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
41c0: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
41d0: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
41e0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
41f0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4200: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4210: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4220: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4230: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4240: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4250: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4260: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
4270: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
4280: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
4290: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
42a0: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
42b0: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
42c0: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
42d0: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
42e0: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
42f0: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
4300: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
4310: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
4320: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
4330: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
4340: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4350: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
4360: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
4370: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
4380: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
4390: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
43a0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
43b0: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
43c0: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
43d0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
43e0: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
43f0: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
4400: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
4410: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
4420: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
4430: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
4440: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
4450: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
4460: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
4470: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
4480: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
4490: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
44a0: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
44b0: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
44c0: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
44d0: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
44e0: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
44f0: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
4500: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
4510: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
4520: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
4530: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
4540: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
4550: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
4560: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
4570: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
4580: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
4590: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
45a0: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
45b0: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
45c0: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
45d0: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
45e0: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
45f0: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
4600: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
4610: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
4620: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
4630: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
4640: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
4650: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
4660: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
4670: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
4680: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
4690: 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74 69 65  LogEst quantatie
46a0: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
46b0: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
46c0: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
46d0: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
46e0: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
46f0: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
4700: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
4710: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
4720: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
4730: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
4740: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
4750: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
4760: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
4770: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
4780: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
4790: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
47a0: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
47b0: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
47d0: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
47e0: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
47f0: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
4800: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
4810: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
4820: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
4830: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
4840: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
4850: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
4860: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
4870: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
4880: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
4890: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
48a0: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
48b0: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
48c0: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
48d0: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
48e0: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
48f0: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
4900: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
4910: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
4920: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4930: 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69  he machine is bi
4940: 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69  g or little endi
4950: 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68  an,.** and wheth
4960: 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64  er or not that d
4970: 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20  etermination is 
4980: 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70  run-time or comp
4990: 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ile-time..**.** 
49a0: 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d  For best perform
49b0: 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74  ance, an attempt
49c0: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73   is made to gues
49d0: 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72  s at the byte-or
49e0: 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70  der.** using C-p
49f0: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
4a00: 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20  os.  If that is 
4a10: 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72  unsuccessful, or
4a20: 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f   if.** -DSQLITE_
4a30: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
4a40: 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e  R=1 is set, then
4a50: 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64   byte-order is d
4a60: 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20  etermined.** at 
4a70: 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66  run-time..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
4a90: 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e  AMATION.const in
4aa0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
4ab0: 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 63  ;.#else.extern c
4ac0: 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33  onst int sqlite3
4ad0: 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  one;.#endif.#if 
4ae0: 28 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20  (defined(i386)  
4af0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4b00: 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66  i386__)   || def
4b10: 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c  ined(_M_IX86) ||
4b20: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
4b30: 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20  ed(__x86_64) || 
4b40: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34  defined(__x86_64
4b50: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
4b60: 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a  M_X64)  ||    \.
4b70: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
4b80: 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  AMD64) || define
4b90: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c  d(_M_ARM)     ||
4ba0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20   defined(__x86) 
4bb0: 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64    ||    \.     d
4bc0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29  efined(__arm__))
4bd0: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
4be0: 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45  ITE_RUNTIME_BYTE
4bf0: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
4c00: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
4c10: 20 20 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e      1234.# defin
4c20: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
4c30: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
4c40: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
4c50: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
4c60: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
4c70: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
4c80: 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64  LE.#endif.#if (d
4c90: 65 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20  efined(sparc)   
4ca0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70   || defined(__pp
4cb0: 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20  c__))  \.    && 
4cc0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
4cd0: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
4ce0: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
4cf0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
4d00: 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51  4321.# define SQ
4d10: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
4d20: 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    1.# define SQL
4d30: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
4d40: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
4d50: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
4d60: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23  SQLITE_UTF16BE.#
4d70: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
4d80: 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ed(SQLITE_BYTEOR
4d90: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
4da0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
4db0: 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61    0     /* 0 mea
4dc0: 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63  ns "unknown at c
4dd0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a  ompile-time" */.
4de0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4df0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
4e00: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
4e10: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
4e20: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
4e30: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
4e40: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
4e50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
4e60: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
4e70: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4e80: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
4e90: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
4ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
4eb0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
4ec0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
4ed0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
4ee0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
4ef0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
4f00: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
4f10: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
4f20: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
4f30: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
4f40: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
4f50: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
4f60: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
4f70: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
4f80: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
4f90: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
4fa0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
4fb0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
4fc0: 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  /* .** Round up 
4fd0: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
4fe0: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
4ff0: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
5000: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
5010: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
5020: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
5030: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
5040: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
5050: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
5060: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
5070: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
5080: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
5090: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
50a0: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
50b0: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
50c0: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
50d0: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
50e0: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
50f0: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
5100: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
5110: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
5120: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
5130: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
5140: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
5150: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
5160: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
5170: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
5180: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
5190: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
51a0: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
51b0: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
51c0: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20  () implemention 
51d0: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
51e0: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
51f0: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
5200: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
5210: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
5220: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
5230: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
5240: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
5250: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
5260: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
5270: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
5280: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
5290: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
52a0: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
52b0: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
52c0: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
52d0: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
52e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
52f0: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
5300: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
5310: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
5320: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
5330: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
5340: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
5350: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
5360: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5370: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5380: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5390: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
53a0: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
53b0: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
53c0: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
53d0: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
53e0: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
53f0: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
5400: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
5410: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20  tionals.h>.# if 
5420: 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45  TARGET_OS_IPHONE
5430: 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54  .#   undef SQLIT
5440: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
5450: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5460: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5470: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
5480: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5490: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
54a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
54b0: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
54c0: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
54d0: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
54e0: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
54f0: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
5500: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
5510: 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  un).#   define S
5520: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5530: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
5540: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
5550: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5560: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
5570: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
5580: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
5590: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f  E_MAX_MMAP_SIZE_
55a0: 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20  xc 1 /* exclude 
55b0: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
55c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
55d0: 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  e default MMAP_S
55e0: 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61  IZE is zero on a
55f0: 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f  ll platforms.  O
5600: 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72  r, even if a lar
5610: 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d  ger.** default M
5620: 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63  MAP_SIZE is spec
5630: 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ified at compile
5640: 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  -time, make sure
5650: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a   that it does.**
5660: 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20   not exceed the 
5670: 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a  maximum mmap siz
5680: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
5690: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
56a0: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
56b0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
56c0: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66  MAP_SIZE 0.# def
56d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
56e0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  LT_MMAP_SIZE_xc 
56f0: 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72  1  /* Exclude fr
5700: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
5710: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
5720: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
5730: 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E>SQLITE_MAX_MMA
5740: 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53  P_SIZE.# undef S
5750: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
5760: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5770: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5780: 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45  MMAP_SIZE SQLITE
5790: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
57a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c  endif../*.** Onl
57b0: 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  y one of SQLITE_
57c0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20  ENABLE_STAT3 or 
57d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
57e0: 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e  AT4 can be defin
57f0: 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20  ed..** Priority 
5800: 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49  is given to SQLI
5810: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e  TE_ENABLE_STAT4.
5820: 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20    If either are 
5830: 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a  defined, also.**
5840: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5850: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5860: 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53  TAT4.*/.#ifdef S
5870: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5880: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5890: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
58a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
58b0: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
58c0: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
58d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
58e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
58f0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5900: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
5910: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5920: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e  T3_OR_STAT4.# un
5930: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5940: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5950: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
5960: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
5970: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5980: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
5990: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
59a0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
59b0: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
59c0: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a  sqlite handle. .
59d0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
59e0: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
59f0: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
5a00: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
5a10: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
5a20: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
5a30: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
5a40: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
5a50: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
5a60: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
5a70: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
5a80: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
5a90: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
5aa0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
5ab0: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
5ac0: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
5ad0: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
5ae0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
5af0: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
5b00: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
5b10: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
5b20: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
5b30: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
5b40: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
5b50: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
5b60: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
5b70: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
5b80: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
5b90: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
5ba0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5bb0: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
5bc0: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
5bd0: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
5be0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
5bf0: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
5c00: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
5c10: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
5c20: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
5c30: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
5c40: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
5c50: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
5c60: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
5c70: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
5c80: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
5c90: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
5ca0: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
5cb0: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
5cc0: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
5cd0: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
5ce0: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
5cf0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
5d00: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
5d10: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
5d20: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
5d30: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
5d40: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
5d50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
5d60: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
5d70: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
5d80: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
5d90: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
5da0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
5db0: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
5dc0: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
5dd0: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
5de0: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
5df0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
5e00: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
5e10: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
5e20: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
5e30: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20  ** Determine if 
5e40: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
5e50: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a  a power of two.*
5e60: 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65  /.#define IsPowe
5e70: 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26  rOfTwo(X) (((X)&
5e80: 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a  ((X)-1))==0)../*
5e90: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
5ea0: 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73  g value as a des
5eb0: 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f  tructor means to
5ec0: 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72   use sqlite3DbFr
5ed0: 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  ee()..** The sql
5ee0: 69 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75  ite3DbFree() rou
5ef0: 74 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77  tine requires tw
5f00: 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73  o parameters ins
5f10: 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20  tead of the .** 
5f20: 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74 68  one parameter th
5f30: 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e  at destructors n
5f40: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53  ormally want.  S
5f50: 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74  o we have to int
5f60: 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69 73 20  roduce .** this 
5f70: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
5f80: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
5f90: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
5fa0: 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20  ently.  Any .** 
5fb0: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
5fc0: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
5fd0: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
5fe0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
5ff0: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
6000: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
6010: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
6020: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
6030: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
6040: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
6050: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
6060: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
6070: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
6080: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
6090: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
60a0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
60b0: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
60c0: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
60d0: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
60e0: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
60f0: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
6100: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
6110: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
6120: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
6130: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
6140: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
6150: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
6160: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
6170: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
6180: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
6190: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
61a0: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
61b0: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
61c0: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
61d0: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
61e0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
61f0: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
6200: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
6210: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
6220: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
6230: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
6240: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
6250: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
6260: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
6270: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
6280: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
6290: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
62a0: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
62b0: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
62c0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
62d0: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
62e0: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
62f0: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
6300: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
6310: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
6320: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
6330: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
6340: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
6350: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
6360: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
6370: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
6380: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
6390: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
63a0: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
63b0: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
63c0: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
63d0: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
63e0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
63f0: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
6400: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
6410: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
6420: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
6430: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
6440: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
6450: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
6460: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
6470: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
6480: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
6490: 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  D .  #define GLO
64a0: 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65  BAL(t,v) v.  #de
64b0: 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62  fine sqlite3Glob
64c0: 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  alConfig sqlite3
64d0: 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f  Config.#endif../
64e0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
64f0: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
6500: 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63  ed to suppress c
6510: 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73  ompiler warnings
6520: 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20   and to.** make 
6530: 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61  it clear to huma
6540: 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61  n readers when a
6550: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
6560: 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74  ter is deliberat
6570: 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  ely .** left unu
6580: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
6590: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
65a0: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
65b0: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
65c0: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
65d0: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
65e0: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
65f0: 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a   example the .**
6600: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6610: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
6620: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
6630: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
6640: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
6650: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
6660: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
6670: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
6680: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
6690: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
66a0: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
66b0: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
66c0: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
66d0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
66e0: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
66f0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
6700: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
6710: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
6720: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
6730: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
6740: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
6750: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
6760: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
6770: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
6780: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
6790: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
67a0: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
67b0: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
67c0: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
67d0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
67e0: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
67f0: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
6800: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
6810: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
6820: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
6830: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
6840: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
6850: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
6860: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
6870: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
6880: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
6890: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
68a0: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
68b0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
68c0: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
68d0: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
68e0: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
68f0: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
6900: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
6910: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
6920: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
6930: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
6940: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
6950: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
6960: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
6970: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
6980: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
6990: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
69a0: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
69b0: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
69c0: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
69d0: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
69e0: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
69f0: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
6a00: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
6a10: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
6a20: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
6a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6a40: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
6a50: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6a60: 74 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53  t ExprSpan ExprS
6a70: 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  pan;.typedef str
6a80: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
6a90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6aa0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
6ab0: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
6ac0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
6ad0: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
6ae0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
6af0: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
6b00: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
6b10: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
6b20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6b30: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
6b40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6b50: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
6b60: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
6b70: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
6b80: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
6b90: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
6ba0: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
6bb0: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6bc0: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
6bd0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
6be0: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
6bf0: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
6c00: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
6c10: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
6c20: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
6c30: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
6c40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
6c50: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
6c60: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
6c70: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
6c80: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
6c90: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
6ca0: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
6cb0: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
6cc0: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
6cd0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6ce0: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
6cf0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
6d00: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
6d10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d20: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
6d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d40: 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63 75  StrAccum StrAccu
6d50: 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  m;.typedef struc
6d60: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
6d70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
6d80: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
6d90: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
6da0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
6db0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
6dc0: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
6dd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
6de0: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
6df0: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
6e00: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
6e10: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
6e20: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
6e30: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
6e40: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
6e50: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
6e60: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
6e70: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
6e80: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
6e90: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
6ea0: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
6eb0: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
6ec0: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
6ed0: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
6ee0: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
6ef0: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
6f00: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
6f10: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
6f20: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
6f30: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
6f40: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
6f50: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
6f60: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
6f70: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
6f80: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
6f90: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
6fa0: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
6fb0: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
6fc0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
6fd0: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
6fe0: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
6ff0: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
7000: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
7010: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7020: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
7030: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
7040: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
7050: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
7060: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
7070: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
7080: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
7090: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
70a0: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
70b0: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
70c0: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
70d0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
70e0: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
70f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7100: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
7110: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
7120: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
7130: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
7140: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
7150: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
7160: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
7170: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
7180: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
7190: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
71a0: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
71b0: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
71c0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
71d0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
71e0: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
71f0: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
7200: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
7210: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
7220: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
7230: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
7240: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
7250: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
7260: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
7270: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7280: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
7290: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
72a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
72b0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
72c0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
72d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
72e0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
72f0: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
7300: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
7310: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
7320: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
7330: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
7340: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
7350: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
7360: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
7370: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
7380: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
7390: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
73a0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
73b0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
73c0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
73d0: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
73e0: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
73f0: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
7400: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
7410: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
7420: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
7430: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
7440: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
7450: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
7460: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
7470: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
7480: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
7490: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
74a0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
74b0: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
74c0: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
74d0: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
74e0: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
74f0: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
7500: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
7510: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
7520: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
7530: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
7540: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
7550: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
7560: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
7570: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
7580: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
7590: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
75a0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
75b0: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
75c0: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
75d0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
75e0: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
75f0: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
7600: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
7610: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
7620: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
7630: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
7640: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
7650: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
7660: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
7670: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
7680: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
7690: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
76a0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
76b0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
76c0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
76d0: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
76e0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
76f0: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
7700: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
7710: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
7720: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
7730: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
7740: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
7750: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
7760: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
7770: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
7780: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
7790: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
77a0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
77b0: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
77c0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
77d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
77e0: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
77f0: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
7800: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
7810: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
7820: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
7830: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
7840: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
7850: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
7860: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
7870: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
7880: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
7890: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
78a0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
78b0: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
78c0: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
78d0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
78e0: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
78f0: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
7900: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
7910: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7920: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
7930: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
7940: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
7950: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
7960: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7970: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
7980: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
7990: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
79a0: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
79b0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
79c0: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
79d0: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
79e0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
79f0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7a00: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
7a10: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
7a20: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
7a30: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
7a40: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
7a50: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
7a60: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
7a70: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
7a80: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
7a90: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
7aa0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
7ab0: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
7ac0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
7ad0: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
7ae0: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
7af0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
7b00: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
7b10: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
7b20: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
7b30: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
7b40: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
7b50: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
7b60: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
7b70: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
7b80: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
7b90: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
7ba0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
7bb0: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
7bc0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
7bd0: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
7be0: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
7bf0: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
7c00: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
7c10: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
7c20: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
7c30: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
7c40: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
7c50: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
7c60: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
7c70: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
7c80: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
7c90: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
7ca0: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
7cb0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
7cc0: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
7cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
7ce0: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
7cf0: 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b  T_TRIGGER_DEPTH+
7d00: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
7d10: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
7d20: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
7d30: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
7d40: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
7d50: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
7d60: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
7d70: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
7d80: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
7d90: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
7da0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
7db0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7dc0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
7dd0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7de0: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
7df0: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
7e00: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
7e10: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
7e20: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
7e30: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
7e40: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
7e50: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
7e60: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
7e70: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
7e80: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
7e90: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
7ea0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
7eb0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
7ec0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
7ed0: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
7ee0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
7ef0: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
7f00: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
7f10: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
7f20: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
7f30: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
7f40: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
7f50: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
7f60: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
7f70: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
7f80: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
7f90: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
7fa0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
7fb0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7fc0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
7fd0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
7fe0: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
7ff0: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
8000: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
8010: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
8020: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
8030: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
8040: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
8050: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8060: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
8070: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
8080: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8090: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
80a0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
80b0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
80c0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
80d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
80e0: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
80f0: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
8100: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
8110: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
8120: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
8130: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
8140: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
8150: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
8160: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
8170: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
8180: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
8190: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
81a0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
81b0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
81c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
81d0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
81e0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
81f0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
8200: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8210: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
8220: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
8230: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
8240: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
8250: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
8260: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
8270: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
8280: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
8290: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
82a0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
82b0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
82c0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
82d0: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
82e0: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
82f0: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
8300: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
8310: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
8320: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
8330: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
8340: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
8350: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
8360: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
8370: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
8380: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
8390: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
83a0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
83b0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
83c0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
83d0: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
83e0: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
83f0: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
8400: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
8410: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
8420: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
8430: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
8440: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
8450: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
8460: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
8470: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
8480: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
8490: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
84a0: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
84b0: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
84c0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
84d0: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
84e0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
84f0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8500: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
8510: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8520: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
8530: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
8540: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
8550: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
8560: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
8570: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
8580: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
8590: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
85a0: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
85b0: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
85c0: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
85d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
85e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
85f0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
8600: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
8610: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
8620: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
8630: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
8640: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8660: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
8670: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
8680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8690: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
86a0: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
86b0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
86c0: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
86e0: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
86f0: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
8700: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
8710: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
8720: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
8730: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
8740: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
8750: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8770: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
8780: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
8790: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
87a0: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
87b0: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
87c0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
87d0: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
87e0: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
87f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
8800: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
8810: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
8820: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
8830: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8840: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
8850: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
8860: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
8870: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
8880: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
8890: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
88a0: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
88b0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
88c0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
88e0: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
88f0: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
8900: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
8910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
8920: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
8930: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
8940: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8960: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
8970: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
8980: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
8990: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
89a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
89b0: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
89c0: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
89d0: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
89e0: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
89f0: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
8a00: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
8a10: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
8a20: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
8a30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8a40: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
8a50: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
8a60: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
8a70: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
8a80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
8a90: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
8aa0: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
8ab0: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
8ac0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
8ad0: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
8ae0: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
8af0: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
8b00: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
8b10: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
8b20: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
8b30: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
8b40: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
8b50: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
8b60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
8b70: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
8b80: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
8b90: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
8ba0: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
8bb0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
8bc0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
8bd0: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
8be0: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
8bf0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
8c00: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
8c10: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
8c20: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
8c30: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
8c40: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
8c50: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
8c60: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
8c70: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
8c80: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
8c90: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
8ca0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
8cb0: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
8cc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
8cd0: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
8ce0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
8cf0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d10: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
8d20: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
8d30: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
8d40: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8d60: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
8d70: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
8d80: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
8d90: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
8da0: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
8db0: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
8dc0: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
8dd0: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
8de0: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
8df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8e00: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
8e10: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
8e20: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
8e30: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
8e40: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8e50: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
8e60: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
8e70: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
8e80: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
8e90: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8ea0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
8eb0: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
8ec0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
8ed0: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
8ee0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8ef0: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
8f00: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
8f10: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8f30: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
8f40: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
8f50: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
8f60: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
8f70: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
8f80: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
8f90: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
8fa0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
8fb0: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
8fc0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
8fd0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8fe0: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9010: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
9020: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9030: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
9040: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
9050: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
9060: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
9070: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
9080: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
9090: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
90a0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
90b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
90c0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
90f0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
9100: 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a  ) */   .  int (*
9110: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
9120: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
9130: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
9140: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
9150: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9170: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
9180: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
9190: 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28  ) */   .  void (
91a0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
91b0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
91c0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
91d0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
91e0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
91f0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
9200: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
9210: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
9220: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
9230: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64  te_int64);.#ifnd
9240: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
9250: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
9260: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
9270: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
9280: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
9290: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
92a0: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
92b0: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
92c0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
92d0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
92e0: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
92f0: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
9300: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
9310: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
9320: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
9330: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
9340: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
9350: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
9360: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
9370: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
9380: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
9390: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
93a0: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
93b0: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
93c0: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
93d0: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
93e0: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
93f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
9400: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
9410: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
9420: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
9430: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
9440: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
9450: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
9460: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
9470: 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41  ATION.  int (*xA
9480: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
9490: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
94a0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
94b0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
94c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
94f0: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
9500: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
9510: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
9520: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
9530: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
9540: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
9550: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
9560: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
9570: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
9580: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
9590: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
95a0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
95b0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
95c0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
95d0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
95e0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
95f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
9600: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
9610: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
9620: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9630: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
9640: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
9650: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
9660: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
9670: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
9680: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
9690: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
96a0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
96b0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
96c0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
96d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
96e0: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
96f0: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
9700: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
9710: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
9720: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
9730: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
9740: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
9750: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
9760: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
9770: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
9780: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
9790: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
97a0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
97b0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
97c0: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
97d0: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
97e0: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
97f0: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
9800: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
9810: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
9820: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
9830: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
9840: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
9850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9860: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
9870: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
9880: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
9890: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
98a0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
98b0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
98d0: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
98e0: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
98f0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
9900: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
9910: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
9920: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
9930: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
9940: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
9950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
9960: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
9970: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
9980: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
99a0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
99b0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
99c0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
99d0: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
99e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
99f0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
9a00: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
9a10: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
9a20: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
9a30: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
9a40: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
9a50: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
9a60: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
9a70: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
9a80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
9a90: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
9aa0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
9ab0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
9ac0: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
9ad0: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
9ae0: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
9af0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
9b00: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
9b10: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
9b20: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
9b30: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
9b40: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
9b50: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
9b60: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
9b70: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
9b80: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
9b90: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
9ba0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
9bb0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
9bc0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
9bd0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
9be0: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
9bf0: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
9c00: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
9c10: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
9c20: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
9c30: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
9c40: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
9c50: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
9c60: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
9c70: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
9c80: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
9c90: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
9ca0: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
9cb0: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
9cc0: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
9cd0: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
9ce0: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
9cf0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
9d00: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
9d10: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
9d20: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
9d30: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
9d40: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9d50: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
9d60: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
9d70: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9d90: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
9da0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
9db0: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
9dc0: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
9dd0: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
9de0: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
9df0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9e00: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
9e10: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
9e20: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
9e30: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
9e40: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
9e50: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
9e60: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
9e70: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
9e80: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
9e90: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
9ea0: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
9eb0: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
9ec0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
9ed0: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
9ee0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9ef0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
9f00: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
9f10: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
9f20: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
9f30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
9f40: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
9f50: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
9f60: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
9f70: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
9f80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
9f90: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
9fa0: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
9fb0: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
9fc0: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
9fd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
9fe0: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
9ff0: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
a000: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
a010: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
a020: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
a030: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
a040: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
a050: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
a060: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a070: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
a080: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
a090: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
a0a0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
a0b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a0c0: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
a0d0: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
a0e0: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
a0f0: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
a100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
a110: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
a120: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
a130: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
a140: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a170: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
a180: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
a190: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1c0: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
a1d0: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
a1e0: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
a1f0: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
a200: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
a210: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
a220: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
a230: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a260: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
a270: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
a280: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
a290: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
a2a0: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
a2b0: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
a2c0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
a2d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
a2e0: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
a2f0: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
a300: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
a310: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
a320: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
a330: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
a340: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
a350: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
a360: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
a370: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
a380: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
a390: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
a3a0: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
a3b0: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
a3c0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
a3d0: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
a3e0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
a3f0: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
a400: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
a410: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
a420: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
a430: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
a440: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
a450: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
a460: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
a470: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
a480: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
a490: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
a4a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
a4b0: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
a4c0: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
a4d0: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
a4e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a4f0: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
a500: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
a510: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
a520: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
a530: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
a540: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
a550: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
a560: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
a570: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
a580: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
a590: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
a5a0: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
a5b0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
a5c0: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
a5d0: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
a5e0: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
a5f0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
a600: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
a610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a620: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
a630: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
a640: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
a650: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
a660: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
a670: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
a680: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
a690: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
a6a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
a6b0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
a6c0: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
a6d0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
a6e0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
a6f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
a700: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
a710: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
a720: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
a730: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
a740: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
a750: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
a760: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
a770: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
a780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
a790: 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30  beEQP        0x0
a7a0: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  4000000  /* Debu
a7b0: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
a7c0: 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  PLAN */.../*.** 
a7d0: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
a7e0: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
a7f0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
a800: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
a810: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
a820: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
a830: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
a840: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
a850: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
a860: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
a870: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
a880: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a890: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
a8a0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
a8b0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
a8c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a8d0: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
a8e0: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
a8f0: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
a900: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
a910: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
a920: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
a930: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
a940: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a950: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
a960: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
a970: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
a980: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
a990: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
a9a0: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
a9b0: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
a9c0: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
a9d0: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
a9e0: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
a9f0: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
aa00: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
aa10: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
aa20: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
aa30: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
aa40: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
aa50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
aa60: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
aa70: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
aa80: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
aa90: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
aaa0: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
aab0: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
aac0: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
aad0: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
aae0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
aaf0: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
ab00: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
ab10: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
ab20: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
ab30: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
ab40: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
ab50: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
ab60: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
ab70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ab80: 5f 53 74 61 74 33 20 20 20 20 20 20 20 20 20 20  _Stat3          
ab90: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
aba0: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33  the SQLITE_STAT3
abb0: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
abc0: 65 20 53 51 4c 49 54 45 5f 41 64 6a 75 73 74 4f  e SQLITE_AdjustO
abd0: 75 74 45 73 74 20 20 20 30 78 31 30 30 30 20 20  utEst   0x1000  
abe0: 20 2f 2a 20 41 64 6a 75 73 74 20 6f 75 74 70 75   /* Adjust outpu
abf0: 74 20 65 73 74 69 6d 61 74 65 73 20 75 73 69 6e  t estimates usin
ac00: 67 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  g WHERE */.#defi
ac10: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
ac20: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
ac30: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
ac40: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
ac50: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
ac60: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
ac70: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
ac80: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
ac90: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
aca0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
acb0: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
acc0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
acd0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
ace0: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
acf0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
ad00: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
ad10: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
ad20: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
ad30: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
ad40: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
ad50: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
ad60: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
ad70: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
ad80: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
ad90: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
ada0: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
adb0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
adc0: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
add0: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
ade0: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
adf0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
ae00: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
ae10: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
ae20: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
ae30: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
ae40: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
ae50: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
ae60: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
ae70: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
ae80: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
ae90: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
aea0: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
aeb0: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
aec0: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
aed0: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
aee0: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
aef0: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
af00: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
af10: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
af20: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
af30: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
af40: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
af50: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
af60: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
af70: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
af80: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
af90: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
afa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
afb0: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
afc0: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
afd0: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
afe0: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
aff0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
b000: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
b010: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
b020: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
b030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
b040: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
b050: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
b060: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
b070: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
b080: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
b090: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
b0a0: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
b0b0: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
b0c0: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
b0d0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
b0e0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
b0f0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
b100: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
b110: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
b120: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
b130: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
b140: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
b150: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
b160: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
b170: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
b180: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
b190: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
b1a0: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
b1b0: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
b1c0: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
b1d0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
b1e0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
b1f0: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
b200: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b210: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
b220: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
b230: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
b240: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
b250: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
b260: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
b270: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
b280: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
b290: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
b2a0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
b2b0: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
b2c0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
b2d0: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
b2e0: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
b2f0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
b300: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
b310: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
b320: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
b330: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
b340: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b350: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b360: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
b370: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
b380: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
b390: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b3b0: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
b3c0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
b3d0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
b3e0: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
b3f0: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
b400: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
b410: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
b420: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
b430: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
b440: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
b450: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
b460: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
b470: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
b480: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
b490: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
b4a0: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
b4b0: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
b4c0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
b4d0: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
b4e0: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
b4f0: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
b500: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
b510: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
b520: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
b530: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
b540: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
b550: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
b560: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
b570: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
b580: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
b590: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
b5a0: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
b5b0: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
b5c0: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
b5d0: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
b5e0: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
b5f0: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
b600: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
b610: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
b620: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
b630: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
b640: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
b650: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
b660: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
b670: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
b680: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
b690: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
b6a0: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
b6b0: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
b6c0: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
b6d0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
b6e0: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
b6f0: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
b700: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
b710: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
b720: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
b730: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
b740: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
b750: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
b760: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
b770: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
b780: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
b790: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
b7a0: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
b7b0: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
b7c0: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
b7d0: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
b7e0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
b7f0: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
b800: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
b810: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
b820: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
b830: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
b840: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
b850: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
b860: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
b870: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
b880: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
b890: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
b8a0: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
b8b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b8c0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
b8d0: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
b8e0: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
b8f0: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
b900: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b910: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
b920: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
b930: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
b940: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
b950: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b960: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20  _CASE     0x008 
b970: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
b980: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
b990: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
b9a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
b9b0: 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70  M    0x010 /* Ep
b9c0: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
b9d0: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
b9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b9f0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30  C_NEEDCOLL 0x020
ba00: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
ba10: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
ba20: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
ba30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ba40: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34  NC_LENGTH   0x04
ba50: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
ba60: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
ba70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba80: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
ba90: 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x080 /* Built-i
baa0: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
bab0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
bac0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
bad0: 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69      0x100 /* Bui
bae0: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
baf0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
bb00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
bb10: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f  COALESCE 0x200 /
bb20: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
bb30: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
bb40: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
bb50: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
bb60: 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74  Y 0x400 /* Built
bb70: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
bb80: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
bb90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
bba0: 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a  ONSTANT 0x800 /*
bbb0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
bbc0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
bbd0: 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a   output */../*.*
bbe0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
bbf0: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
bc00: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
bc10: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
bc20: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
bc30: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
bc40: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
bc50: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
bc60: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
bc70: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
bc80: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
bc90: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
bca0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
bcb0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
bcc0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
bcd0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
bce0: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
bcf0: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
bd00: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
bd10: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
bd20: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
bd30: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
bd40: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
bd50: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
bd60: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
bd70: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
bd80: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
bd90: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
bda0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
bdb0: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
bdc0: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
bdd0: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
bde0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
bdf0: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
be00: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
be10: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
be20: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
be30: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
be40: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
be50: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
be60: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
be70: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
be80: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
be90: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
bea0: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
beb0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
bec0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
bed0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
bee0: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
bef0: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
bf00: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
bf10: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
bf20: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
bf30: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
bf40: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
bf50: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
bf60: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
bf70: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
bf80: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
bf90: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
bfa0: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
bfb0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
bfc0: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
bfd0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
bfe0: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
bff0: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
c000: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
c010: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
c020: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
c030: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
c040: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
c050: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
c060: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
c070: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
c080: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
c090: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
c0a0: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
c0b0: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
c0c0: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
c0d0: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
c0e0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
c0f0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
c100: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
c110: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
c120: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
c130: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c140: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c150: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
c160: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
c170: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
c180: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
c190: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
c1a0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
c1b0: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
c1c0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
c1d0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
c1e0: 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
c1f0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c200: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
c210: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
c220: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
c230: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
c240: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
c250: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
c260: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
c270: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
c280: 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
c290: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c2a0: 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
c2b0: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
c2c0: 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
c2d0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
c2e0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
c2f0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
c300: 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
c310: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
c320: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
c330: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c340: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  , 0}.#define STR
c350: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
c360: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
c370: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
c380: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
c390: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
c3a0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
c3b0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
c3c0: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
c3d0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
c3e0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
c3f0: 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
c400: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
c410: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
c420: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
c430: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
c440: 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
c450: 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
c460: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
c470: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
c480: 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d  e AGGREGATE(zNam
c490: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
c4a0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
c4b0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
c4c0: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
c4d0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
c4e0: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
c4f0: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
c500: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
c510: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a  al,#zName,0,0}..
c520: 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
c530: 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
c540: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
c550: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
c560: 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
c570: 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
c580: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
c590: 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
c5a0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
c5b0: 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
c5c0: 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
c5d0: 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
c5e0: 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
c5f0: 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
c600: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
c610: 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
c620: 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
c630: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c640: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
c650: 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
c660: 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
c670: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
c680: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
c690: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c6a0: 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
c6b0: 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
c6c0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
c6d0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
c6e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c6f0: 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
c700: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
c710: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
c720: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
c730: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
c740: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
c750: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
c760: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
c770: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
c780: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
c790: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
c7a0: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
c7b0: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
c7c0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
c7d0: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
c7e0: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
c7f0: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
c800: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
c810: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
c820: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
c830: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
c840: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
c850: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
c860: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
c870: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
c880: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
c890: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
c8a0: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
c8b0: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
c8c0: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
c8d0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
c8e0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
c8f0: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
c900: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
c910: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
c920: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
c930: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
c940: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
c950: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
c960: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
c970: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
c9a0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
c9b0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
c9c0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
c9d0: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
c9e0: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
c9f0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
ca00: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
ca10: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
ca20: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
ca30: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
ca40: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
ca50: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
ca60: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
ca70: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
ca80: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
ca90: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
caa0: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
cab0: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
cac0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
cad0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
cae0: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
caf0: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
cb00: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
cb10: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
cb20: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
cb30: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
cb40: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
cb50: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
cb60: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
cb70: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
cb80: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
cb90: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
cba0: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
cbb0: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
cbc0: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
cbd0: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
cbe0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
cbf0: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
cc00: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
cc10: 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
cc20: 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
cc30: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68  mated size of th
cc40: 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d  is column.  INT=
cc50: 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
cc60: 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
cc70: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
cc80: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
cc90: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
cca0: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
ccb0: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
ccc0: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
ccd0: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
cce0: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
ccf0: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
cd00: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
cd10: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
cd20: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
cd30: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
cd40: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
cd50: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
cd60: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
cd70: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
cd80: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
cd90: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
cda0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
cdb0: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
cdc0: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
cdd0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
cde0: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
cdf0: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
ce00: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
ce10: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
ce20: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
ce30: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
ce40: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
ce50: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
ce60: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
ce70: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
ce80: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
ce90: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
cea0: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
ceb0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
cec0: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
ced0: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
cee0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
cef0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
cf00: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
cf10: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
cf20: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
cf30: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
cf40: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
cf50: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
cf60: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
cf70: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
cf80: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
cf90: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
cfa0: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
cfb0: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
cfc0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
cfd0: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
cfe0: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
cff0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
d000: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
d010: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
d020: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
d030: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
d040: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
d050: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d060: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
d070: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
d080: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
d090: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
d0a0: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
d0b0: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
d0c0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
d0d0: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
d0e0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
d0f0: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
d100: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
d110: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
d120: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
d130: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
d140: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
d150: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
d160: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
d170: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
d180: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
d190: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
d1a0: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
d1b0: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
d1c0: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
d1d0: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
d1e0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
d1f0: 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61  th 'a'.  That wa
d200: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
d210: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
d220: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
d230: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
d240: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
d250: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
d260: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
d270: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
d280: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
d290: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
d2a0: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
d2b0: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
d2c0: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
d2d0: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
d2e0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
d2f0: 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rison..*/.#defin
d300: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
d310: 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e  T     'a'.#defin
d320: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  e SQLITE_AFF_NON
d330: 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e  E     'b'.#defin
d340: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
d350: 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e  ERIC  'c'.#defin
d360: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
d370: 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e  EGER  'd'.#defin
d380: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
d390: 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69  L     'e'..#defi
d3a0: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
d3b0: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
d3c0: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
d3d0: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
d3e0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
d3f0: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
d400: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
d410: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
d420: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
d430: 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ue. .*/.#define 
d440: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
d450: 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20      0x67../*.** 
d460: 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
d470: 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
d480: 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
d490: 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
d4a0: 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
d4b0: 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
d4c0: 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
d4d0: 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
d4e0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
d4f0: 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
d500: 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
d510: 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
d520: 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
d530: 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
d540: 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
d550: 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
d560: 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
d570: 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
d580: 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
d590: 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
d5a0: 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
d5b0: 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
d5c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
d5d0: 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20  PIFNULL   0x08  
d5e0: 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
d5f0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d600: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
d610: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
d620: 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65    0x10  /* Store
d630: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
d640: 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
d650: 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
d660: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
d670: 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
d680: 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
d690: 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
d6a0: 20 20 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73       0x88  /* As
d6b0: 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
d6c0: 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
d6d0: 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
d6e0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
d6f0: 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
d700: 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
d710: 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
d720: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
d730: 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49  schema. .**.** I
d740: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
d750: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
d760: 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
d770: 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
d780: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
d790: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
d7a0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
d7b0: 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
d7c0: 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
d7d0: 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
d7e0: 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
d7f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
d800: 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
d810: 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
d820: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
d830: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
d840: 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
d850: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
d860: 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  le .** implement
d870: 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
d880: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
d890: 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
d8a0: 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62  etween .** datab
d8b0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c  ase connections,
d8c0: 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72   even when the r
d8d0: 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65  est of the in-me
d8e0: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a  mory database .*
d8f0: 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
d900: 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
d910: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
d920: 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
d930: 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
d940: 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
d950: 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
d960: 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
d970: 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
d980: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
d990: 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
d9a0: 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
d9b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
d9c0: 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
d9d0: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
d9e0: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
d9f0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
da00: 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20  ess real tables 
da10: 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
da20: 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
da30: 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
da40: 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
da50: 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74  ers .** transact
da60: 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
da70: 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
da80: 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
da90: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f   database .** co
daa0: 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
dab0: 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
dac0: 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
dad0: 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
dae0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
daf0: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
db00: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
db10: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
db20: 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
db30: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
db40: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
db50: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
db60: 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
db70: 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
db80: 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
db90: 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
dba0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
dbb0: 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
dbc0: 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
dbd0: 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
dbe0: 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
dbf0: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
dc00: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
dc10: 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
dc20: 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
dc30: 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
dc40: 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
dc50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
dc60: 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
dc70: 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
dc80: 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
dc90: 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
dca0: 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
dcb0: 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
dcc0: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
dcd0: 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
dce0: 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
dcf0: 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
dd00: 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
dd10: 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
dd20: 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
dd30: 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
dd40: 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a  ects are not .**
dd50: 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
dd60: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
dd70: 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
dd80: 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a  Disconnect()ed .
dd90: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
dda0: 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
ddb0: 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
ddc0: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
ddd0: 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
dde0: 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
ddf0: 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
de00: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
de10: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
de20: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
de30: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
de40: 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
de50: 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
de60: 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74  ected .** next t
de70: 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
de80: 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
de90: 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
dea0: 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
deb0: 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
dec0: 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
ded0: 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
dee0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
def0: 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
df00: 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
df10: 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
df20: 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
df30: 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
df40: 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
df50: 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
df60: 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
df70: 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
df80: 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
df90: 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
dfa0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
dfb0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
dfc0: 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
dfd0: 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
dfe0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
dff0: 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
e000: 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33  d by .** sqlite3
e010: 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e  DbMalloc(), usin
e020: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
e030: 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69   handle stored i
e040: 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a  n VTable.db as .
e050: 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
e060: 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
e070: 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
e080: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
e090: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
e0a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
e0b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
e0c0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
e0d0: 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
e0e0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
e0f0: 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
e100: 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
e110: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
e120: 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
e130: 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
e140: 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
e150: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
e160: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e170: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
e180: 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
e190: 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
e1a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
e1b0: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
e1c0: 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
e1d0: 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
e1e0: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
e1f0: 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
e200: 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
e210: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
e220: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
e230: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
e240: 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
e250: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  ) */.};../*.** E
e260: 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73  ach SQL table is
e270: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
e280: 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73  memory by an ins
e290: 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20  tance of the.** 
e2a0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e2b0: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ure..**.** Table
e2c0: 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  .zName is the na
e2d0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  me of the table.
e2e0: 20 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68    The case of th
e2f0: 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52  e original.** CR
e300: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
e310: 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20  ment is stored, 
e320: 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20  but case is not 
e330: 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a  significant for.
e340: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a  ** comparisons..
e350: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c  **.** Table.nCol
e360: 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
e370: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
e380: 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e  s table.  Table.
e390: 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69  aCol is a.** poi
e3a0: 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79  nter to an array
e3b0: 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63   of Column struc
e3c0: 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65  tures, one for e
e3d0: 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a  ach column..**.*
e3e0: 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 68  * If the table h
e3f0: 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52  as an INTEGER PR
e400: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
e410: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74  Table.iPKey is t
e420: 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74  he index of.** t
e430: 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69  he column that i
e440: 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74  s that key.   Ot
e450: 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50  herwise Table.iP
e460: 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e  Key is negative.
e470: 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74    Note.** that t
e480: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
e490: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d  he PRIMARY KEY m
e4a0: 75 73 74 20 62 65 20 49 4e 54 45 47 45 52 20 66  ust be INTEGER f
e4b0: 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f  or this field to
e4c0: 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20  .** be set.  An 
e4d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
e4e0: 4b 45 59 20 69 73 20 75 73 65 64 20 61 73 20 74  KEY is used as t
e4f0: 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63  he rowid for eac
e500: 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20  h row of.** the 
e510: 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62  table.  If a tab
e520: 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45  le has no INTEGE
e530: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74  R PRIMARY KEY, t
e540: 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77  hen a random row
e550: 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74  id.** is generat
e560: 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
e570: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
e580: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
e590: 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65  is set if.** the
e5a0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50   table has any P
e5b0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45  RIMARY KEY, INTE
e5c0: 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65  GER or otherwise
e5d0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e  ..**.** Table.tn
e5e0: 75 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  um is the page n
e5f0: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f  umber for the ro
e600: 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66  ot BTree page of
e610: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68   the table in th
e620: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69  e.** database fi
e630: 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44  le.  If Table.iD
e640: 62 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  b is the index o
e650: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
e660: 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20  able backend.** 
e670: 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e  in sqlite.aDb[].
e680: 20 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d    0 is for the m
e690: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
e6a0: 20 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69   1 is for the fi
e6b0: 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73  le that.** holds
e6c0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
e6d0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20  s and indices.  
e6e0: 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  If TF_Ephemeral 
e6f0: 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74  is set.** then t
e700: 68 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72  he table is stor
e710: 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61  ed in a file tha
e720: 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  t is automatical
e730: 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68  ly deleted.** wh
e740: 65 6e 20 74 68 65 20 56 44 42 45 20 63 75 72 73  en the VDBE curs
e750: 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  or to the table 
e760: 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74  is closed.  In t
e770: 68 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74  his case Table.t
e780: 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56  num .** refers V
e790: 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
e7a0: 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
e7b0: 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74   table open, not
e7c0: 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20   to the root.** 
e7d0: 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72  page number.  Tr
e7e0: 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61  ansient tables a
e7f0: 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  re used to hold 
e800: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
e810: 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68  .** sub-query th
e820: 61 74 20 61 70 70 65 61 72 73 20 69 6e 73 74 65  at appears inste
e830: 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ad of a real tab
e840: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46  le name in the F
e850: 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f  ROM clause .** o
e860: 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
e870: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
e880: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
e890: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
e8a0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
e8b0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
e8c0: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
e8d0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
e8e0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
e8f0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
e900: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
e910: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
e920: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
e930: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
e940: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
e950: 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
e960: 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
e970: 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
e980: 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
e990: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
e9a0: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
e9b0: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
e9c0: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
e9d0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
e9e0: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
e9f0: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
ea00: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
ea10: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66  ch column */.#if
ea20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ea30: 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73  _CHECK.  ExprLis
ea40: 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
ea50: 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
ea60: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
ea70: 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
ea80: 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
ea90: 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
eaa0: 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
eab0: 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
eac0: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
ead0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42         /* Root B
eae0: 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68  Tree node for th
eaf0: 69 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f  is table (see no
eb00: 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  te above) */.  i
eb10: 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
eb20: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
eb30: 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
eb40: 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70  [iPKey] as the p
eb50: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20  rimary key */.  
eb60: 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
eb70: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
eb80: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
eb90: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36  s table */.  u16
eba0: 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
ebb0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
ebc0: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
ebd0: 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  Table */.  LogEs
ebe0: 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
ebf0: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
ec00: 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
ec10: 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
ec20: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
ec30: 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
ec40: 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
ec50: 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
ec60: 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
ec70: 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
ec80: 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46  #endif.  u8 tabF
ec90: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
eca0: 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
ecb0: 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79  lues */.  u8 key
ecc0: 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
ecd0: 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
ece0: 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
ecf0: 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
ed00: 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
ed10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
ed20: 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
ed30: 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
ed40: 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
ed50: 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
ed60: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
ed70: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
ed80: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
ed90: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
eda0: 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
edb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
edc0: 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
edd0: 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
ede0: 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
edf0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c    /* Text of all
ee00: 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30   module args. [0
ee10: 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65  ] is module name
ee20: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
ee30: 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
ee40: 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
ee50: 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
ee60: 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
ee70: 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
ee80: 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
ee90: 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
eea0: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
eeb0: 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
eec0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
eed0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
eee0: 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
eef0: 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
ef00: 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
ef10: 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
ef20: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
ef30: 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
ef40: 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66  abFlags..*/.#def
ef50: 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
ef60: 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
ef70: 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
ef80: 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
ef90: 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
efa0: 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
efb0: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  * An ephemeral t
efc0: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
efd0: 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
efe0: 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61     0x04    /* Ta
eff0: 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
f000: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
f010: 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
f020: 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49  t   0x08    /* I
f030: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
f040: 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d  ey is autoincrem
f050: 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ent */.#define T
f060: 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20  F_Virtual       
f070: 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20    0x10    /* Is 
f080: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
f090: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69  */.#define TF_Wi
f0a0: 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78  thoutRowid    0x
f0b0: 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
f0c0: 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20  d used. PRIMARY 
f0d0: 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a  KEY is the key *
f0e0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  /.../*.** Test t
f0f0: 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
f100: 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
f110: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
f120: 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
f130: 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
f140: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
f150: 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
f160: 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
f170: 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
f180: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
f190: 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
f1a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
f1b0: 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
f1c0: 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
f1d0: 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  )      (((X)->ta
f1e0: 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74  bFlags & TF_Virt
f1f0: 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69  ual)!=0).#  defi
f200: 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
f210: 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
f220: 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
f230: 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65  IDDEN)!=0).#else
f240: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
f250: 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
f260: 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
f270: 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
f280: 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  dif../* Does the
f290: 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
f2a0: 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
f2b0: 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
f2c0: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
f2d0: 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
f2e0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
f2f0: 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
f300: 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
f310: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f320: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
f330: 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
f340: 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
f350: 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
f360: 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
f370: 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
f380: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
f390: 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
f3a0: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
f3b0: 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
f3c0: 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
f3d0: 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
f3e0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
f3f0: 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
f400: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
f410: 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
f420: 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
f430: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
f440: 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
f450: 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
f460: 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
f470: 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
f480: 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
f490: 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
f4a0: 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
f4b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
f4c0: 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
f4d0: 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
f4e0: 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
f4f0: 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
f500: 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
f510: 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
f520: 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
f530: 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
f540: 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
f550: 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
f560: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
f570: 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
f580: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
f590: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
f5a0: 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
f5b0: 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
f5c0: 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
f5d0: 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
f5e0: 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
f5f0: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
f600: 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
f610: 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
f620: 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
f630: 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
f640: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
f650: 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
f660: 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
f670: 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
f680: 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
f690: 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
f6a0: 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
f6b0: 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
f6c0: 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
f6d0: 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
f6e0: 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
f6f0: 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
f700: 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
f710: 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
f720: 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
f730: 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
f740: 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
f750: 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
f760: 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
f770: 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
f780: 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
f790: 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
f7a0: 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
f7b0: 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
f7c0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
f7d0: 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
f7e0: 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
f7f0: 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
f800: 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
f810: 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
f820: 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
f830: 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
f840: 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
f850: 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
f860: 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
f870: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
f880: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f890: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f8a0: 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
f8b0: 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
f8c0: 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
f8d0: 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
f8e0: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
f8f0: 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
f900: 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
f910: 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
f920: 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
f930: 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
f940: 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
f950: 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
f960: 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
f970: 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
f980: 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
f990: 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
f9a0: 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
f9b0: 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
f9c0: 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
f9d0: 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
f9e0: 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
f9f0: 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
fa00: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
fa10: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
fa20: 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
fa30: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
fa40: 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
fa50: 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
fa60: 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
fa70: 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
fa80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fa90: 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
faa0: 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
fab0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
fac0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
fad0: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
fae0: 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
faf0: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
fb00: 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
fb10: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
fb20: 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
fb30: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
fb40: 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
fb50: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
fb60: 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
fb70: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
fb80: 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
fb90: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
fba0: 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
fbb0: 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
fbc0: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
fbd0: 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
fbe0: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
fbf0: 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
fc00: 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
fc10: 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
fc20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
fc30: 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
fc40: 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
fc50: 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
fc60: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
fc70: 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
fc80: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
fc90: 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
fca0: 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
fcb0: 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
fcc0: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
fcd0: 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
fce0: 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
fcf0: 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
fd00: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
fd10: 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
fd20: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
fd30: 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
fd40: 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
fd50: 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
fd60: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
fd70: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
fd80: 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
fd90: 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
fda0: 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
fdb0: 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
fdc0: 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
fdd0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
fde0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
fdf0: 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
fe00: 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
fe10: 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
fe20: 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
fe30: 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
fe40: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
fe50: 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
fe60: 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
fe70: 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
fe80: 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
fe90: 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
fea0: 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
feb0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
fec0: 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
fed0: 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
fee0: 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
fef0: 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
ff00: 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
ff10: 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
ff20: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
ff30: 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
ff40: 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
ff50: 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
ff60: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
ff70: 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
ff80: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
ff90: 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
ffa0: 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
ffb0: 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
ffc0: 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20  key..** .** The 
ffd0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
ffe0: 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
fff0: 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
10000 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
10010 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
10020 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
10030 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
10040 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
10050 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
10060 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
10070 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
10080 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
10090 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
100a0 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
100b0 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
100c0 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
100d0 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
100e0 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
100f0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
10100 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
10110 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
10120 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
10130 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
10140 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
10150 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
10160 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
10170 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
10180 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
10190 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
101a0 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
101b0 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
101c0 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
101d0 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
101e0 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
101f0 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
10200 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
10210 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
10220 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
10230 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
10240 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
10250 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
10260 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
10270 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
10280 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
10290 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
102a0 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
102b0 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
102c0 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
102d0 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
102e0 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
102f0 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
10300 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68  lt  10  /* Do wh
10310 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
10320 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
10330 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
10340 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10350 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
10360 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
10370 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
10380 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
10390 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
103a0 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
103b0 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72  l the .** compar
103c0 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
103d0 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
103e0 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
103f0 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
10400 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
10410 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
10420 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
10430 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
10440 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
10450 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
10460 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
10470 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
10480 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
10490 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
104a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
104b0 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
104c0 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
104d0 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
104e0 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
104f0 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
10500 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
10510 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
10520 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
10530 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
10540 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
10550 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
10560 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46  dex */.  u16 nXF
10570 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
10580 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
10590 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79  s beyond the key
105a0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71   columns */.  sq
105b0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
105c0 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
105d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
105e0 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
105f0 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
10600 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
10610 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
10620 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
10630 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
10640 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
10650 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
10660 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
10670 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10680 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10690 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
106a0 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69  on about a.** si
106b0 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72  ngle index recor
106c0 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
106d0 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  dy been parsed o
106e0 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
106f0 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  al.** values..**
10700 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
10710 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
10720 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
10730 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
10740 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
10750 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
10760 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10770 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
10780 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
10790 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
107a0 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
107b0 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
107c0 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
107d0 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
107e0 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
107f0 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
10800 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
10810 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
10820 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  de..**.** This s
10830 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61  tructure holds a
10840 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73   record that has
10850 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69   already been di
10860 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e  sassembled.** in
10870 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65  to its constitue
10880 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a  nt fields..**.**
10890 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 6d   The r1 and r2 m
108a0 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73 20  ember variables 
108b0 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62 79  are only used by
108c0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20 63   the optimized c
108d0 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e  omparison.** fun
108e0 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f 72  ctions vdbeRecor
108f0 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61 6e  dCompareInt() an
10900 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70  d vdbeRecordComp
10910 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a  areString()..*/.
10920 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
10930 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
10940 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
10950 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
10960 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
10970 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e  ation */.  u16 n
10980 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
10990 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
109a0 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
109b0 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
109c0 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
109d0 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
109e0 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
109f0 2f 0a 20 20 75 38 20 69 73 43 6f 72 72 75 70 74  /.  u8 isCorrupt
10a00 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 72 72 75  ;       /* Corru
10a10 70 74 69 6f 6e 20 64 65 74 65 63 74 65 64 20 62  ption detected b
10a20 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
10a30 28 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  () */.  Mem *aMe
10a40 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
10a50 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72  alues */.  int r
10a60 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  1;             /
10a70 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
10a80 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
10a90 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20   */.  int r2;   
10aa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
10ab0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
10ac0 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d  (rhs < lhs) */.}
10ad0 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
10ae0 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
10af0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
10b00 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
10b10 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10b20 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
10b30 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
10b40 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
10b50 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
10b60 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
10b70 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
10b80 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
10b90 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
10ba0 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
10bb0 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
10bc0 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
10bd0 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
10be0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
10bf0 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
10c00 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
10c10 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
10c20 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
10c30 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
10c40 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
10c50 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
10c60 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
10c70 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
10c80 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
10c90 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
10ca0 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
10cb0 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
10cc0 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
10cd0 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
10ce0 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
10cf0 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
10d00 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
10d10 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
10d20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
10d30 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
10d40 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
10d50 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
10d60 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
10d70 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
10d80 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
10d90 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
10da0 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
10db0 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
10dc0 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
10dd0 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
10de0 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
10df0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
10e00 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
10e10 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
10e20 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
10e30 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
10e40 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
10e50 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
10e60 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
10e70 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
10e80 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
10e90 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
10ea0 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
10eb0 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
10ec0 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
10ed0 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
10ee0 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
10ef0 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
10f00 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
10f10 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
10f20 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
10f30 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
10f40 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
10f50 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
10f60 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
10f70 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
10f80 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
10f90 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
10fa0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
10fb0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
10fc0 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
10fd0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
10fe0 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
10ff0 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
11000 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
11010 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
11020 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
11030 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
11040 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
11050 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
11060 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
11070 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
11080 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
11090 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
110a0 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
110b0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
110c0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
110d0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
110e0 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
110f0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
11100 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
11110 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
11120 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
11130 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
11140 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
11150 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
11160 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
11170 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
11180 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
11190 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
111a0 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
111b0 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
111c0 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
111d0 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
111e0 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
111f0 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
11200 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
11210 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
11220 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
11230 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
11240 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65   indices */.  Ke
11250 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
11260 20 20 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49         /* A KeyI
11270 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61  nfo object suita
11280 62 6c 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ble for this ind
11290 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  ex */.  int tnum
112a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
112b0 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
112c0 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
112d0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c  his index */.  L
112e0 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20  ogEst szIdxRow; 
112f0 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11300 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77  ated average row
11310 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a   size in bytes *
11320 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b  /.  u16 nKeyCol;
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11340 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
11350 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65  s forming the ke
11360 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75  y */.  u16 nColu
11370 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
11380 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
11390 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74  umns stored in t
113a0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  he index */.  u8
113b0 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20   onError;       
113c0 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f         /* OE_Abo
113d0 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
113e0 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
113f0 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67  _None */.  unsig
11400 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20  ned idxType:2;  
11410 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45      /* 1==UNIQUE
11420 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59  , 2==PRIMARY KEY
11430 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45  , 0==CREATE INDE
11440 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  X */.  unsigned 
11450 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20  bUnordered:1;   
11460 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65  /* Use this inde
11470 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71  x for == or IN q
11480 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  ueries only */. 
11490 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f   unsigned uniqNo
114a0 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  tNull:1;  /* Tru
114b0 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20  e if UNIQUE and 
114c0 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c  NOT NULL for all
114d0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e   columns */.  un
114e0 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64  signed isResized
114f0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
11500 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a  f resizeIndexObj
11510 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  ect() has been c
11520 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67  alled */.  unsig
11530 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31  ned isCovering:1
11540 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
11550 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e  his is a coverin
11560 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65  g index */.#ifde
11570 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
11580 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
11590 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
115a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
115b0 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
115c0 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
115d0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
115e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
115f0 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
11600 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
11610 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
11620 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
11630 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
11640 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
11650 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
11660 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
11670 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
11680 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
11690 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
116a0 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
116b0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
116c0 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
116d0 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
116e0 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
116f0 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
11700 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
11710 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
11720 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
11730 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
11740 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
11750 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
11760 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
11770 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
11780 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
11790 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
117a0 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
117b0 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
117c0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
117d0 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
117e0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
117f0 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
11800 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
11810 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
11820 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
11830 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
11840 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
11850 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
11860 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
11870 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
11880 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
11890 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a  =OE_None)../*.**
118a0 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
118b0 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
118c0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
118d0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
118e0 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67  memory .** using
118f0 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
11900 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
11910 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
11920 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
11930 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
11940 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
11950 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
11960 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
11970 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
11980 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
11990 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
119a0 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
119b0 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
119c0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
119d0 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
119e0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
119f0 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
11a00 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
11a10 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
11a20 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
11a30 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
11a40 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
11a50 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
11a60 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
11a70 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
11a80 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
11a90 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
11aa0 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
11ab0 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
11ac0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
11ad0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
11ae0 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
11af0 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
11b00 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
11b10 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
11b20 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
11b30 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
11b40 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
11b50 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
11b60 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
11b70 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
11b80 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
11b90 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
11ba0 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
11bb0 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
11bc0 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
11bd0 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
11be0 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
11bf0 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
11c00 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
11c10 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
11c20 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
11c30 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
11c40 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
11c50 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
11c60 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
11c70 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
11c80 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
11c90 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
11ca0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11cb0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
11cc0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
11cd0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
11ce0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
11cf0 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
11d00 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
11d10 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
11d20 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
11d30 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
11d40 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
11d50 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
11d60 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
11d70 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
11d80 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
11d90 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
11da0 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
11db0 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
11dc0 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
11dd0 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
11de0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
11df0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
11e00 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
11e10 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
11e20 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
11e30 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
11e40 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
11e50 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
11e60 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
11e70 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
11e80 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
11e90 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
11ea0 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
11eb0 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
11ec0 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
11ed0 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
11ee0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11ef0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
11f00 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
11f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
11f20 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
11f30 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
11f40 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
11f70 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
11f80 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
11f90 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
11fa0 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
11fb0 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
11fc0 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
11fd0 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
11fe0 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
12010 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
12020 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
12030 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
12040 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
12050 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12060 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
12070 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
12080 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
12090 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
120a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
120b0 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
120c0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
120d0 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
120e0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
120f0 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
12100 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
12110 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
12120 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
12130 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
12140 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
12150 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
12160 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
12170 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
12180 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
12190 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
121a0 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
121b0 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
121c0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
121d0 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
121e0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
121f0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
12200 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
12210 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
12220 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
12230 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
12240 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
12250 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
12260 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
12270 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
12280 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
12290 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
122a0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
122b0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
122c0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
122d0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
122e0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
122f0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
12300 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
12310 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
12320 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
12330 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
12340 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
12350 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
12360 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12370 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
12380 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
12390 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
123a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
123b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
123c0 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
123d0 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
12400 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
12410 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
12420 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
12450 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
12460 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
12470 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
12480 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
12490 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
124a0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
124b0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
124c0 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
124d0 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
124e0 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
124f0 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
12500 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
12510 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
12520 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
12530 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
12540 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
12550 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
12560 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
12570 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
12580 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
12590 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
125a0 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
125b0 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
125c0 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
125d0 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
125e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
125f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
12600 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
12610 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
12620 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
12630 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
12640 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
12650 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
12660 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
12670 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
12680 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
12690 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
126a0 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
126b0 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
126c0 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
126d0 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
126e0 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
126f0 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
12700 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
12710 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
12720 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
12730 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
12740 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
12750 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
12760 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
12770 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
12780 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
12790 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
127a0 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
127b0 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
127c0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
127d0 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
127e0 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
127f0 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
12800 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
12810 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
12820 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
12830 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
12840 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
12850 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
12860 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
12870 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
12880 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
12890 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
128a0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
128b0 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
128c0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
128d0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
128e0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
128f0 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
12900 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
12910 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
12920 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
12930 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
12940 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
12950 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
12960 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
12970 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
12980 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
12990 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
129a0 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
129b0 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
129c0 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
129d0 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
129e0 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
129f0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
12a00 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
12a10 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
12a20 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
12a30 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
12a40 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
12a50 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b  _BLOB, .** or TK
12a60 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
12a70 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
12a80 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
12a90 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
12aa0 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
12ab0 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
12ac0 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
12ad0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
12ae0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a  n contains the .
12af0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
12b00 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
12b10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12b20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
12b30 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
12b40 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
12b50 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
12b60 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
12b70 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
12b80 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
12b90 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
12ba0 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
12bb0 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
12bc0 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
12bd0 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
12be0 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
12bf0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
12c00 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
12c10 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
12c20 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12c30 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
12c40 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
12c50 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
12c60 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
12c70 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
12c80 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
12c90 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
12ca0 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
12cb0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
12cc0 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
12cd0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
12ce0 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
12cf0 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
12d00 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
12d10 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
12d20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
12d30 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
12d40 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
12d50 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
12d60 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
12d70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69  List is .** vali
12d80 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
12d90 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
12da0 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
12db0 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
12dc0 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
12dd0 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
12de0 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
12df0 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
12e00 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
12e10 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
12e20 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
12e30 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
12e40 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
12e50 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
12e60 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
12e70 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
12e80 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
12e90 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
12ea0 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
12eb0 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
12ec0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
12ed0 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
12ee0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
12ef0 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
12f00 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
12f10 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
12f20 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
12f30 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
12f40 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
12f50 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
12f60 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
12f70 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
12f80 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
12f90 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
12fa0 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
12fb0 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27   .** character '
12fc0 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
12fd0 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
12fe0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
12ff0 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  ds the index .**
13000 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
13010 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
13020 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
13030 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
13040 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
13050 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
13060 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
13070 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
13080 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
13090 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
130a0 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
130b0 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
130c0 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
130d0 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
130e0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
130f0 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
13100 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
13110 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
13120 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
13130 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
13140 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
13150 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
13160 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
13170 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
13180 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
13190 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
131a0 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
131b0 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
131c0 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
131d0 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
131e0 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
131f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
13200 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
13210 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
13220 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
13230 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
13240 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
13250 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
13260 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
13270 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
13280 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
13290 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
132a0 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
132b0 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
132c0 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
132d0 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
132e0 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
132f0 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
13300 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
13310 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
13320 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
13330 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
13340 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
13350 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
13360 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
13370 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
13380 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
13390 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
133a0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
133b0 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
133c0 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
133d0 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
133e0 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
133f0 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
13400 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
13410 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
13420 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
13430 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
13440 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
13450 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
13460 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
13470 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
13480 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
13490 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
134a0 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
134b0 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
134c0 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
134d0 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
134e0 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
134f0 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
13500 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
13510 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
13520 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
13530 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
13540 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
13550 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
13560 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
13570 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
13580 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
13590 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
135a0 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
135b0 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
135c0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
135d0 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
135e0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
135f0 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
13600 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
13610 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
13620 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
13630 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
13640 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
13650 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
13660 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
13670 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
13680 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
13690 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
136a0 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
136b0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
136c0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
136d0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
136e0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
136f0 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
13700 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
13710 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
13720 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
13730 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
13740 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
13750 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
13760 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
13770 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a  nction. .  *****
13780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
137c0 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
137d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
137e0 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
137f0 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
13800 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
13810 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
13820 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
13830 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
13840 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
13850 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
13860 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
13870 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
13880 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
13890 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
138a0 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
138b0 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
138c0 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
138d0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
138e0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
138f0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
13900 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
13910 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
13920 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
13930 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
13940 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
13950 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
13960 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
13970 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
13980 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
13990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
139d0 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
139e0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
139f0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
13a00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
13a10 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
13a20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
13a30 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
13a40 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
13a50 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
13a60 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
13a70 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
13a80 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
13ab0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
13ac0 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13ae0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
13af0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
13b20 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30 20 74 69  likely:  1000 ti
13b30 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a  mes likelihood *
13b40 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
13b50 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
13b60 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
13b70 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
13b80 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13ba0 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
13bb0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
13bc0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
13bd0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
13be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
13bf0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
13c00 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
13c10 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
13c20 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
13c30 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
13c40 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
13c50 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
13c60 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
13c70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13c80 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
13c90 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
13ca0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
13cd0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
13ce0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
13d10 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
13d20 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
13d30 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
13d40 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
13d50 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
13d60 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
13d70 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
13d80 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
13d90 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
13da0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
13db0 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
13dc0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
13dd0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
13de0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
13df0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
13e00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
13e10 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
13e20 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20  1 /* Originated 
13e30 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  in ON or USING c
13e40 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
13e50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
13e60 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
13e70 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
13e80 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
13e90 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
13ea0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
13eb0 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a  ved  0x000004 /*
13ec0 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
13ed0 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
13ee0 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
13ef0 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30  _Error     0x000
13f00 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  008 /* Expressio
13f10 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
13f20 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
13f30 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
13f40 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
13f50 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
13f60 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
13f70 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
13f80 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
13f90 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
13fa0 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
13fb0 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
13fc0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
13fd0 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
13fe0 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
13ff0 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
14000 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
14010 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
14020 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
14030 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
14040 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
14050 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
14060 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
14070 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
14080 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
14090 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
140a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
140b0 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
140c0 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
140d0 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
140e0 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
140f0 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
14100 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
14110 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
14120 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
14130 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
14140 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
14150 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
14160 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
14170 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
14180 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
14190 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
141a0 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
141b0 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
141c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
141d0 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
141e0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
141f0 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
14200 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
14210 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
14220 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
14230 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
14240 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
14250 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
14260 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
14270 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
14280 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
14290 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
142a0 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
142b0 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
142c0 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
142d0 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
142e0 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
142f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
14300 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
14310 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
14320 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
14330 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
14340 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
14350 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
14360 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
14370 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
14380 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74  fine EP_Constant
14390 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f    0x080000 /* No
143a0 64 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  de is a constant
143b0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65   */../*.** These
143c0 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
143d0 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
143e0 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
143f0 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e  in the .** Expr.
14400 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
14410 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
14420 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
14430 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
14440 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
14450 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
14460 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
14470 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
14480 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
14490 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
144a0 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
144b0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
144c0 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
144d0 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
144e0 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  P)../* The ExprS
144f0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
14500 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
14510 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
14520 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
14530 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
14540 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
14550 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
14560 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
14570 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
14580 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
14590 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
145a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
145b0 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
145c0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
145d0 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
145e0 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
145f0 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
14600 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
14610 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
14620 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
14630 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
14640 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
14650 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a   normal Expr .**
14660 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
14670 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
14680 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
14690 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
146a0 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  gs .** and an Ex
146b0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
146c0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
146d0 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
146e0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
146f0 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
14700 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
14710 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
14720 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
14730 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
14740 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
14750 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
14760 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
14770 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
14780 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
14790 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
147a0 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
147b0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
147c0 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
147d0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
147e0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
147f0 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
14800 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62  r comment .** ab
14810 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
14820 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
14830 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
14840 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
14850 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
14860 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
14870 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
14880 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
14890 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
148a0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
148b0 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
148c0 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
148d0 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
148e0 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
148f0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
14900 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
14910 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
14920 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
14930 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
14940 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
14950 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
14960 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
14970 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
14980 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
14990 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
149a0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
149b0 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
149c0 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
149d0 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
149e0 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
149f0 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
14a00 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
14a10 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
14a20 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
14a30 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
14a40 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
14a50 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
14a60 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
14a70 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
14a80 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
14a90 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
14aa0 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
14ab0 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
14ac0 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
14ad0 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
14ae0 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
14af0 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
14b00 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
14b10 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
14b20 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
14b30 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
14b40 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
14b50 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
14b60 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
14b70 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
14b80 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
14b90 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
14ba0 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
14bb0 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
14bc0 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
14bd0 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
14be0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
14bf0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
14c00 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
14c10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
14c20 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
14c30 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
14c40 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
14c50 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
14c60 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
14c70 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
14c80 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
14c90 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
14ca0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
14cb0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
14cc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14cd0 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
14ce0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
14cf0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
14d00 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
14d10 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
14d20 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
14d30 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
14d40 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
14d50 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
14d60 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
14d70 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
14d80 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
14d90 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
14da0 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
14db0 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
14dc0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
14dd0 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
14de0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
14df0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
14e00 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
14e10 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
14e20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
14e30 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
14e40 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
14e50 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
14e60 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
14e70 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
14e80 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
14e90 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
14ea0 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
14eb0 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
14ec0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
14ed0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
14ee0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
14ef0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
14f00 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
14f10 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
14f20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
14f30 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
14f40 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
14f50 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20   } u;.  } *a;   
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14f70 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
14f80 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
14f90 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
14fa0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
14fb0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
14fc0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
14fd0 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
14fe0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
14ff0 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
15000 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
15010 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
15020 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
15030 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
15040 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
15050 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
15060 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
15070 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
15080 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
15090 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
150a0 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
150b0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
150c0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
150d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
150e0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
150f0 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
15100 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
15110 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
15120 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15130 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
15140 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
15150 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
15160 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
15170 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
15180 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
15190 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
151a0 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
151b0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
151c0 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
151d0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
151e0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
151f0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
15200 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
15210 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
15220 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
15230 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
15240 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
15250 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
15260 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
15270 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
15280 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
15290 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
152a0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
152b0 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
152c0 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
152d0 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
152e0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
152f0 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
15300 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
15310 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
15320 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
15330 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
15340 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
15350 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
15360 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
15370 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
15380 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
15390 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
153a0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
153b0 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
153c0 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
153d0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
153e0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
153f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15400 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
15410 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
15420 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
15430 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
15440 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
15450 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
15460 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
15470 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
15480 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
15490 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
154a0 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
154b0 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
154c0 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
154d0 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
154e0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
154f0 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
15500 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
15510 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
15520 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
15530 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
15540 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
15550 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
15560 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
15570 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
15580 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
15590 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
155a0 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
155b0 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
155c0 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
155d0 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
155e0 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
155f0 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
15600 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
15610 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
15620 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
15630 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
15640 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
15650 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
15660 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
15670 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
15680 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
15690 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
156a0 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
156b0 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
156c0 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
156d0 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
156e0 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
156f0 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
15700 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
15710 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
15720 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
15730 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
15740 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
15750 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
15760 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
15770 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
15780 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
15790 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
157a0 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
157b0 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
157c0 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
157d0 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
157e0 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
157f0 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
15800 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
15810 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
15820 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
15830 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
15840 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
15850 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
15860 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
15870 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
15880 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
15890 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
158a0 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
158b0 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
158c0 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
158d0 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
158e0 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
158f0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
15900 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
15910 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
15920 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
15930 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
15940 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
15950 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
15960 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
15970 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
15980 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
15990 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
159a0 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
159b0 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
159c0 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
159d0 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
159e0 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
159f0 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
15a00 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
15a10 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
15a20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
15a30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
15a40 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
15a50 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
15a60 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
15a70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
15a80 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
15a90 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
15aa0 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
15ab0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
15ac0 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
15ad0 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
15ae0 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
15af0 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
15b00 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
15b10 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
15b20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
15b30 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
15b40 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
15b50 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
15b60 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
15b70 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
15b80 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
15b90 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
15ba0 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
15bb0 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
15bc0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
15bd0 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
15be0 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
15bf0 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
15c00 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
15c10 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
15c20 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
15c30 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
15c40 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
15c50 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
15c60 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
15c70 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
15c80 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
15c90 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
15ca0 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
15cb0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
15cc0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
15cd0 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
15ce0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
15cf0 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
15d00 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
15d10 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
15d20 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a  tine */.    u8 j
15d30 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
15d40 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
15d50 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20  tween this able 
15d60 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
15d70 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
15d80 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20   notIndexed :1; 
15d90 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
15da0 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44  ere is a NOT IND
15db0 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20  EXED clause */. 
15dc0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
15dd0 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
15de0 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
15df0 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
15e00 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
15e10 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
15e20 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
15e30 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
15e40 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
15e50 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
15e60 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
15e70 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
15e80 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23  nce in WITH */.#
15e90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15ea0 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
15eb0 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
15ec0 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
15ed0 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
15ee0 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
15ef0 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
15f00 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
15f10 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
15f20 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
15f30 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
15f40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
15f50 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
15f60 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
15f70 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
15f80 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
15f90 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
15fa0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
15fb0 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
15fc0 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
15fd0 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
15fe0 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
15ff0 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
16000 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20    char *zIndex; 
16010 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65      /* Identifie
16020 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20  r from "INDEXED 
16030 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61  BY <zIndex>" cla
16040 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78  use */.    Index
16050 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20   *pIndex;    /* 
16060 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
16070 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
16080 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20   zIndex, if any 
16090 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
160a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
160b0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
160c0 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
160d0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
160e0 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
160f0 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
16100 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
16110 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
16120 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
16130 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
16140 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
16150 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
16160 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
16170 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
16180 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
16190 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
161a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
161b0 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
161c0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
161d0 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
161e0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
161f0 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
16200 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
16210 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
16220 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
16230 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
16240 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
16250 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
16260 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
16270 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
16280 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
16290 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
162a0 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
162b0 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
162c0 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
162d0 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
162e0 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
162f0 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
16300 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
16310 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
16320 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
16330 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
16340 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
16350 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
16360 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
16370 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
16380 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16390 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
163a0 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
163b0 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
163c0 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
163d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
163e0 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
163f0 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
16400 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
16410 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
16420 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
16430 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
16440 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
16450 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
16460 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
16470 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
16480 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
16490 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
164a0 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
164b0 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
164c0 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
164d0 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
164e0 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
164f0 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
16500 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
16510 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
16520 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
16530 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
16540 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
16550 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16560 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
16570 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
16580 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
16590 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
165a0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
165b0 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20  _AND_ONLY       
165c0 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27    0x0080 /* Don'
165d0 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f  t use indices fo
165e0 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64  r OR terms */.#d
165f0 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
16600 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
16610 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
16620 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
16630 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
16640 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
16650 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
16660 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
16670 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
16680 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
16690 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
166a0 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
166b0 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
166c0 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
166d0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
166e0 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
166f0 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75      0x0800 /* Su
16700 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
16710 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
16720 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45  #define WHERE_RE
16730 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30  OPEN_IDX       0
16740 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20  x1000 /* Try to 
16750 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  use OP_ReopenIdx
16760 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
16770 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
16780 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
16790 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
167a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
167b0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
167c0 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
167d0 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
167e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
167f0 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
16800 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
16810 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
16820 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
16830 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
16840 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
16850 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
16860 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
16870 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
16880 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
16890 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
168a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
168b0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
168c0 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
168d0 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
168e0 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
168f0 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
16900 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
16910 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
16920 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
16930 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
16940 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
16950 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
16960 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
16970 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
16980 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
16990 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
169a0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
169b0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
169c0 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
169d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
169e0 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
169f0 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
16a00 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
16a10 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
16a20 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
16a30 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
16a40 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
16a50 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
16a60 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
16a70 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
16a80 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
16a90 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
16aa0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
16ab0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
16ac0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
16ad0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
16ae0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
16af0 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
16b00 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
16b10 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
16b20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
16b30 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
16b40 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
16b50 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
16b60 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
16b70 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
16b80 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
16b90 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
16ba0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
16bb0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
16bc0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
16bd0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
16be0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
16bf0 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
16c00 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
16c10 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
16c20 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
16c30 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
16c40 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
16c50 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
16c60 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
16c70 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
16c80 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
16c90 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
16ca0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
16cb0 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
16cc0 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
16cd0 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
16ce0 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
16cf0 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
16d00 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
16d10 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
16d20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
16d30 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
16d40 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
16d50 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
16d60 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
16d70 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
16d80 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
16d90 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
16da0 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
16db0 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
16dc0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
16dd0 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
16de0 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
16df0 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
16e00 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
16e10 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
16e20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
16e30 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
16e40 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
16e50 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
16e60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16e70 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
16e80 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
16e90 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
16ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
16eb0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
16ec0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
16ed0 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
16ee0 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61  es */.  u8 ncFla
16ef0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
16f00 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
16f10 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
16f20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
16f30 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
16f40 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
16f50 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
16f60 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
16f70 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
16f80 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61  01    /* Aggrega
16f90 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
16fa0 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
16fb0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
16fc0 67 67 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  gg    0x02    /*
16fd0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
16fe0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
16ff0 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
17000 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
17010 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  04    /* True if
17020 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17030 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
17040 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
17050 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
17060 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x08    /* True i
17070 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
17080 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
17090 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
170a0 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 31  NC_PartIdx   0x1
170b0 30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  0    /* True if 
170c0 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
170d0 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
170e0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
170f0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
17100 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
17110 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
17120 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
17130 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
17140 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
17150 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
17160 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
17170 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
17180 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
17190 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
171a0 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
171b0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
171c0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
171d0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
171e0 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
171f0 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
17200 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
17210 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
17220 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
17230 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
17240 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
17250 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
17260 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
17270 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
17280 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
17290 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
172a0 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
172b0 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
172c0 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
172d0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
172e0 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
172f0 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
17300 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
17310 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
17320 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
17330 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
17340 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
17350 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
17360 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
17370 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
17380 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
17390 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
173a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
173b0 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
173c0 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
173d0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
173e0 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
173f0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
17400 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
17410 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
17420 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
17430 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
17440 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
17450 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
17460 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
17470 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
17480 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
17490 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
174a0 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
174b0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
174c0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
174d0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
174e0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
174f0 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
17500 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
17510 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
17520 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
17530 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
17540 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
17550 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
17560 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
17570 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
17580 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
17590 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
175a0 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31  K_EXCEPT */.  u1
175b0 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  6 selFlags;     
175c0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
175d0 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
175e0 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
175f0 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
17600 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
17610 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
17620 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  ET counters */. 
17630 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
17640 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
17650 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
17660 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
17670 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20  select */.  u64 
17680 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
17690 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
176a0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
176b0 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69   rows */.  SrcLi
176c0 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
176d0 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
176e0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
176f0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
17700 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
17710 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
17720 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
17730 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
17740 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
17750 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
17760 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
17770 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
17780 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
17790 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
177a0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
177b0 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
177c0 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
177d0 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
177e0 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
177f0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
17800 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
17810 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
17820 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
17830 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
17840 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
17850 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
17860 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
17870 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
17880 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66  . */.  Expr *pOf
17890 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  fset;         /*
178a0 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
178b0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
178c0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69  ot used. */.  Wi
178d0 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
178e0 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61       /* WITH cla
178f0 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
17900 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20  this select. Or 
17910 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  NULL. */.};../*.
17920 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
17930 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
17940 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
17950 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
17960 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
17970 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ag"..*/.#define 
17980 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
17990 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75     0x0001  /* Ou
179a0 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
179b0 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
179c0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
179d0 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a        0x0002  /*
179e0 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
179f0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
17a00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
17a10 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78  gregate       0x
17a20 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0004  /* Contain
17a30 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
17a40 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
17a50 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
17a60 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55  l   0x0008  /* U
17a70 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
17a80 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
17a90 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
17aa0 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31  ded        0x001
17ab0 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
17ac0 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
17ad0 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
17ae0 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
17af0 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20  Info     0x0020 
17b00 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
17b10 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
17b20 65 74 61 64 61 74 61 20 2a 2f 0a 20 20 20 20 20  etadata */.     
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17b40 2a 20 20 20 20 20 30 78 30 30 34 30 20 20 4e 4f  *     0x0040  NO
17b50 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e  T USED */.#defin
17b60 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
17b70 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
17b80 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
17b90 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
17ba0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
17bb0 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30        /*     0x0
17bc0 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f  100  NOT USED */
17bd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
17be0 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32  edFrom      0x02
17bf0 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
17c00 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
17c10 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
17c20 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
17c30 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30 20  nvert    0x0400 
17c40 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
17c50 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
17c60 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
17c70 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
17c80 76 65 20 20 20 20 20 20 20 30 78 30 38 30 30 20  ve       0x0800 
17c90 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
17ca0 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
17cb0 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
17cc0 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64  fine SF_Compound
17cd0 20 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20          0x1000  
17ce0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d  /* Part of a com
17cf0 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 0a  pound query */..
17d00 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
17d10 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
17d20 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
17d30 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
17d40 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
17d50 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
17d60 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
17d70 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
17d80 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
17d90 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
17da0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
17db0 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
17dc0 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
17dd0 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
17de0 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20  y index .**     
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44  identified by pD
17e10 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
17e20 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65  .**     SRT_Exce
17e30 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72  pt      Remove r
17e40 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
17e50 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
17e60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
17e70 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
17e80 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20  ists      Store 
17e90 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  a 1 in memory ce
17ea0 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ll pDest->iSDPar
17eb0 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a  m if the result.
17ec0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
17ed0 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f         set is no
17ee0 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20  t empty..**.**  
17ef0 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20     SRT_Discard  
17f00 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73     Throw the res
17f10 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73  ults away.  This
17f20 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45   is used by SELE
17f30 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  CT.**           
17f40 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
17f50 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
17f60 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20  gers whose only 
17f70 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20  purpose is.**   
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63    the side-effec
17fa0 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e  ts of functions.
17fb0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
17fc0 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65  e above are free
17fd0 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72   to ignore their
17fe0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
17ff0 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20  . Those that.** 
18000 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f  follow must hono
18010 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
18020 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
18030 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
18040 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20   Generate a row 
18050 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67  of output (using
18060 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f   the OP_ResultRo
18070 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
18080 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29           opcode)
18090 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
180a0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
180b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d  .**.**     SRT_M
180c0 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20  em         Only 
180d0 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73  valid if the res
180e0 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ult is a single 
180f0 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20  column..**      
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
18110 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63  tore the first c
18120 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72  olumn of the fir
18130 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a  st result row.**
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72       in register
18160 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
18170 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65  then abandon the
18180 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20   rest.**        
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
181a0 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73  the query.  This
181b0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70   destination imp
181c0 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a  lies "LIMIT 1"..
181d0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65  **.**     SRT_Se
181e0 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65  t         The re
181f0 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73  sult must be a s
18200 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53  ingle column.  S
18210 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20  tore each.**    
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61   row of result a
18240 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62  s the key in tab
18250 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18260 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  m. .**          
18270 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79             Apply
18280 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44   the affinity pD
18290 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66  est->affSdst bef
182a0 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20  ore storing.**  
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65     results.  Use
182d0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22  d to implement "
182e0 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
182f0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18300 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61  EphemTab    Crea
18310 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20  te an temporary 
18320 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
18330 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a  Parm and store.*
18340 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18350 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74        the result
18360 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73   there. The curs
18370 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20  or is left open 
18380 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20  after.**        
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
183a0 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73  urning.  This is
183b0 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
183c0 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20  except that.**  
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183e0 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74     this destinat
183f0 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e  ion uses OP_Open
18400 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65  Ephemeral to cre
18410 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
18420 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74             the t
18430 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a  able first..**.*
18440 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74  *     SRT_Corout
18450 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61  ine   Generate a
18460 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74   co-routine that
18470 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72   returns a new r
18480 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  ow of.**        
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
184a0 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69  ults each time i
184b0 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54  t is invoked.  T
184c0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a  he entry point.*
184d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
184e0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d        of the co-
184f0 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65  routine is store
18500 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44  d in register pD
18510 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20  est->iSDParm.** 
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75      and the resu
18540 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  lt row is stored
18550 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74   in pDest->nDest
18560 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20   registers.**   
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20    starting with 
18590 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a  pDest->iSdst..**
185a0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c  .**     SRT_Tabl
185b0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
185c0 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61  sults in tempora
185d0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
185e0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
185f0 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
18600 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
18610 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74  _EphemTab except
18620 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a   that the table.
18630 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18640 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65         is assume
18650 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20  d to already be 
18660 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20  open.  SRT_Fifo 
18670 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  has.**          
18680 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61             the a
18690 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72  dditional proper
186a0 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65  ty of being able
186b0 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20   to ignore.**   
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186d0 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63    the ORDER BY c
186e0 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
186f0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
18700 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
18710 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  n a temporary ta
18720 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
18730 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
18740 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61             But a
18750 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72  lso use temporar
18760 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
18770 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20  SDParm+1 as.**  
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61     a record of a
187a0 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73  ll prior results
187b0 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20   and ignore any 
187c0 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20  duplicate.**    
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61   rows.  Name mea
187f0 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46  ns:  "Distinct F
18800 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ifo"..**.**     
18810 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
18820 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
18830 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
18840 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28  pDest->iSDParm (
18850 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20  really.**       
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
18870 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64   index).  Append
18880 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62   a sequence numb
18890 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65  er so that all e
188a0 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20  ntries.**       
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
188c0 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a  e distinct..**.*
188d0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75  *     SRT_DistQu
188e0 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75  eue   Store resu
188f0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
18900 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
18910 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20  Parm only if.** 
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63      the same rec
18940 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65  ord has never be
18950 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65  en stored before
18960 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20  .  The.**       
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
18980 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53  dex at pDest->iS
18990 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c  DParm+1 hold all
189a0 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a   prior stores..*
189b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
189c0 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
189d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
189e0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
189f0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
18a00 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
18a10 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
18a20 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
18a30 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
18a40 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
18a50 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69   3  /* Store 1 i
18a60 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
18a70 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65  not empty */.#de
18a80 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
18a90 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e        4  /* Do n
18aa0 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
18ab0 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
18ac0 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f  #define SRT_Fifo
18ad0 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53           5  /* S
18ae0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
18af0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
18b00 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23  matic rowid */.#
18b10 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46  define SRT_DistF
18b20 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69  ifo     6  /* Li
18b30 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74  ke SRT_Fifo, but
18b40 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
18b50 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
18b60 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
18b70 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
18b80 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20  ult in an queue 
18b90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
18ba0 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f  istQueue    8  /
18bb0 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65  * Like SRT_Queue
18bc0 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
18bd0 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ults only */../*
18be0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
18bf0 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
18c00 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
18c10 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
18c20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
18c30 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
18c40 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a  =SRT_DistQueue).
18c50 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
18c60 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20  put       9  /* 
18c70 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
18c80 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
18c90 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
18ca0 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72       10  /* Stor
18cb0 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
18cc0 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
18cd0 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
18ce0 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72       11  /* Stor
18cf0 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
18d00 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
18d10 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
18d20 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20  emTab    12  /* 
18d30 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
18d40 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
18d50 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
18d60 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72  .#define SRT_Cor
18d70 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20  outine   13  /* 
18d80 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c  Generate a singl
18d90 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  e row of result 
18da0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54  */.#define SRT_T
18db0 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f  able       14  /
18dc0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
18dd0 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
18de0 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
18df0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
18e00 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
18e10 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
18e20 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
18e30 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
18e40 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
18e50 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
18e60 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
18e70 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20  eDest;          
18e80 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
18e90 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
18ea0 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a  ts.  On of SRT_*
18eb0 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61   above. */.  cha
18ec0 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20  r affSdst;      
18ed0 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
18ee0 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
18ef0 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20  RT_Set */.  int 
18f00 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20  iSDParm;        
18f10 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20   /* A parameter 
18f20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73  used by the eDes
18f30 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f  t disposal metho
18f40 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74  d */.  int iSdst
18f50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
18f60 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65  ase register whe
18f70 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77  re results are w
18f80 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
18f90 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  nSdst;          
18fa0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
18fb0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
18fc0 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  d */.  ExprList 
18fd0 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b  *pOrderBy;  /* K
18fe0 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53  ey columns for S
18ff0 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54  RT_Queue and SRT
19000 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b  _DistQueue */.};
19010 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
19020 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
19030 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
19040 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
19050 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  o AUTOINCREMENT 
19060 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
19070 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
19080 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
19090 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
190a0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
190b0 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
190c0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
190d0 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
190e0 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
190f0 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
19100 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
19110 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
19120 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
19130 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
19140 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
19150 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
19160 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67  down within trig
19170 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
19180 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
19190 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
191a0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
191b0 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
191c0 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
191d0 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
191e0 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
191f0 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
19200 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
19210 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
19220 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
19230 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
19240 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
19250 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
19260 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
19270 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
19280 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
19290 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
192a0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
192b0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
192c0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
192d0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
192e0 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
192f0 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
19300 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
19310 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
19320 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
19330 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
19340 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
19350 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
19360 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
19370 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
19380 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
19390 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
193a0 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
193b0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
193c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
193d0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
193e0 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65   each .** trigge
193f0 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
19400 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
19410 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
19420 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
19430 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
19440 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
19450 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
19460 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
19470 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
19480 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
19490 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
194a0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
194b0 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
194c0 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
194d0 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
194e0 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
194f0 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
19500 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
19510 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
19520 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
19530 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
19540 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
19550 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
19560 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
19570 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
19580 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
19590 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
195a0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
195b0 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
195c0 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
195d0 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
195e0 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
195f0 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
19600 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
19610 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
19620 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
19630 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
19640 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
19650 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
19660 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
19670 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
19680 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
19690 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74   INSERT .** stat
196a0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
196b0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
196c0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
196d0 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
196e0 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
196f0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
19700 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
19710 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
19720 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
19730 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
19740 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
19750 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
19760 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
19770 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
19780 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
19790 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
197a0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
197b0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
197c0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
197d0 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
197e0 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
197f0 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
19800 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
19810 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
19820 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
19830 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
19840 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
19850 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
19860 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
19870 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
19880 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
19890 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
198a0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
198b0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
198c0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
198d0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
198e0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
198f0 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b  ned char yDbMask
19900 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  [(SQLITE_MAX_ATT
19910 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64  ACHED+9)/8];.# d
19920 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
19930 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28  (M,I)    (((M)[(
19940 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37  I)/8]&(1<<((I)&7
19950 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
19960 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
19970 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30      memset((M),0
19980 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65  ,sizeof(M)).# de
19990 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
199a0 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f  ,I)     (M)[(I)/
199b0 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29  8]|=(1<<((I)&7))
199c0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
199d0 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c  AllZero(M)   sql
199e0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
199f0 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62  o(M).# define Db
19a00 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
19a10 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41   (sqlite3DbMaskA
19a20 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65  llZero(M)==0).#e
19a30 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
19a40 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
19a50 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  sk;.# define DbM
19a60 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
19a70 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b  (((M)&(((yDbMask
19a80 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23  )1)<<(I)))!=0).#
19a90 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
19aa0 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30  ro(M)      (M)=0
19ab0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
19ac0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
19ad0 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  |=(((yDbMask)1)<
19ae0 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44  <(I)).# define D
19af0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
19b00 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e    (M)==0.# defin
19b10 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
19b20 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64  M)   (M)!=0.#end
19b30 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
19b40 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
19b50 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
19b60 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
19b70 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
19b80 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
19b90 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
19ba0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
19bb0 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
19bc0 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
19bd0 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
19be0 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
19bf0 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
19c00 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
19c10 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
19c20 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
19c30 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
19c40 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
19c50 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
19c60 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
19c70 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
19c80 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
19c90 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
19ca0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
19cb0 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
19cc0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
19cd0 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
19ce0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
19cf0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
19d00 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
19d10 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
19d20 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
19d30 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
19d40 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
19d50 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
19d60 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
19d70 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
19d80 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
19d90 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
19da0 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
19db0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
19dc0 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
19dd0 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
19de0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
19df0 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
19e00 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
19e10 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
19e20 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
19e30 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
19e40 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
19e50 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
19e60 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
19e70 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
19e80 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
19e90 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
19ea0 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
19eb0 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
19ec0 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
19ed0 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
19ee0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
19ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
19f00 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
19f10 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
19f20 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
19f30 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
19f40 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
19f50 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
19f60 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
19f70 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
19f80 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
19f90 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
19fa0 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
19fb0 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
19fc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19fd0 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
19fe0 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
19ff0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1a000 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
1a010 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a020 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
1a030 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
1a040 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  pReg[] */.  u8 i
1a050 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
1a060 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1a070 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79  ement may modify
1a080 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
1a090 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
1a0a0 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
1a0b0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1a0c0 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
1a0d0 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
1a0e0 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d  n */.  u8 hasCom
1a0f0 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e  pound;      /* N
1a100 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f  eed to invoke co
1a110 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1a120 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1a130 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46  */.  u8 okConstF
1a140 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20  actor;    /* OK 
1a150 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f  to factor out co
1a160 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  nstants */.  int
1a170 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
1a180 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
1a190 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
1a1a0 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69  registers */.  i
1a1b0 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
1a1c0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
1a1d0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
1a1e0 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1a1f0 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
1a200 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1a210 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
1a220 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1a230 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
1a240 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1a250 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
1a260 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1a270 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
1a280 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
1a290 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
1a2a0 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
1a2b0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
1a2c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a2d0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
1a2e0 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
1a2f0 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20  */.  int nSet;  
1a300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a310 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64  ber of sets used
1a320 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1a330 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20   nOnce;         
1a340 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
1a350 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69  P_Once instructi
1a360 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ons so far */.  
1a370 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20  int nOpAlloc;   
1a380 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a390 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
1a3a0 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1a3b0 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64   */.  int iFixed
1a3c0 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Op;        /* Ne
1a3d0 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63  ver back out opc
1a3e0 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20  odes iFixedOp-1 
1a3f0 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20  or earlier */.  
1a400 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
1a410 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1a420 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
1a430 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
1a440 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
1a450 69 50 61 72 74 49 64 78 54 61 62 3b 20 20 20 20  iPartIdxTab;    
1a460 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73   /* Table corres
1a470 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72  ponding to a par
1a480 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20  tial index */.  
1a490 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
1a4a0 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
1a4b0 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
1a4c0 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
1a4d0 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
1a4e0 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
1a4f0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1a500 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
1a510 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
1a520 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  u values */.  in
1a530 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
1a540 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a550 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
1a560 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
1a570 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
1a580 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
1a590 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  s */.  struct yC
1a5a0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1a5b0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1a5c0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1a5d0 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1a5e0 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1a5f0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1a600 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1a610 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1a620 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1a630 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1a640 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1a650 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1a660 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1a670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1a680 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1a690 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1a6a0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1a6b0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
1a6c0 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
1a6d0 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
1a6e0 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
1a6f0 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
1a700 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
1a710 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
1a720 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
1a730 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
1a740 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
1a750 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
1a760 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
1a770 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ry */.  ExprList
1a780 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
1a790 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
1a7a0 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ions */.  Token 
1a7b0 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f  constraintName;/
1a7c0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1a7d0 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74  nstraint current
1a7e0 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20  ly being parsed 
1a7f0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
1a800 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
1a810 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
1a820 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
1a830 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
1a840 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
1a850 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
1a860 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
1a870 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
1a880 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
1a890 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
1a8a0 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
1a8b0 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
1a8c0 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
1a8d0 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
1a8e0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1a8f0 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
1a900 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
1a910 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
1a920 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
1a930 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a940 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1a950 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
1a960 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
1a970 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
1a980 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
1a990 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
1a9a0 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
1a9b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1a9c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1a9d0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1a9e0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1a9f0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1aa00 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1aa10 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1aa20 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1aa30 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1aa40 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1aa50 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1aa60 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1aa70 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1aa80 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1aa90 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1aaa0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
1aab0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
1aac0 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
1aad0 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
1aae0 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
1aaf0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
1ab00 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
1ab10 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
1ab20 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
1ab30 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
1ab40 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
1ab50 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1ab60 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64   for */.  int ad
1ab70 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
1ab80 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
1ab90 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1aba0 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
1abb0 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  LE */.  int addr
1abc0 53 6b 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20  SkipPK;      /* 
1abd0 41 64 64 72 65 73 73 20 6f 66 20 69 6e 73 74 72  Address of instr
1abe0 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50  uction to skip P
1abf0 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78  RIMARY KEY index
1ac00 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
1ac10 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
1ac20 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
1ac30 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
1ac40 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
1ac50 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
1ac60 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1ac70 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1ac80 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
1ac90 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
1aca0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1acb0 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
1acc0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1acd0 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
1ace0 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
1acf0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
1ad00 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
1ad10 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
1ad20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
1ad30 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
1ad40 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
1ad50 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
1ad60 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
1ad70 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
1ad80 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
1ad90 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
1ada0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1adb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1adc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1add0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41  *********.  ** A
1ade0 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
1adf0 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
1ae00 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
1ae10 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
1ae20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
1ae30 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20  recursion.  The 
1ae40 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e  boundary between
1ae50 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f   these two regio
1ae60 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ns is determined
1ae70 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73  .  ** using offs
1ae80 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29  etof(Parse,nVar)
1ae90 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65   so the nVar fie
1aea0 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 20 66  ld must be the f
1aeb0 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20  irst field.  ** 
1aec0 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
1aed0 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a   region..  *****
1aee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1aef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1af20 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72  ***/..  int nVar
1af30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1af40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
1af50 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
1af60 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
1af70 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56  far */.  int nzV
1af80 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
1af90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1afa0 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20  available slots 
1afb0 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20  in azVar[] */.  
1afc0 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
1afd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
1afe0 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
1aff0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1b000 20 2a 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69   */.  u8 bFreeWi
1b010 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1b020 2f 2a 20 54 72 75 65 20 69 66 20 70 57 69 74 68  /* True if pWith
1b030 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
1b040 20 77 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a   with parser */.
1b050 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
1b060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b070 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
1b080 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
1b090 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
1b0a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1b0b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1b0c0 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74  E.  u8 declareVt
1b0d0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
1b0e0 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20   True if inside 
1b0f0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1b100 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20  vtab() */.  int 
1b110 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
1b120 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b130 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
1b140 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
1b150 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73  dif.  int nAlias
1b160 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b170 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69  /* Number of ali
1b180 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ased result set 
1b190 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74  columns */.  int
1b1a0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
1b1b0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
1b1c0 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
1b1d0 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
1b1e0 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
1b1f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1b200 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
1b210 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
1b220 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
1b230 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
1b240 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1b250 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
1b260 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
1b270 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1b280 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
1b290 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
1b2a0 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a  ndif.  char **az
1b2b0 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1b2c0 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20   /* Pointers to 
1b2d0 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74  names of paramet
1b2e0 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
1b2f0 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
1b300 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
1b310 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
1b320 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
1b330 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1b340 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
1b350 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
1b360 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
1b370 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
1b380 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
1b390 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
1b3a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
1b3b0 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
1b3c0 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
1b3d0 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
1b3e0 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
1b3f0 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
1b400 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
1b410 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
1b420 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1b430 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
1b440 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
1b450 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
1b460 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
1b470 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  meToken;        
1b480 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75   /* Token with u
1b490 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d  nqualified schem
1b4a0 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f  a object name */
1b4b0 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f  .  Token sLastTo
1b4c0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1b4d0 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
1b4e0 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66  arsed */.#ifndef
1b4f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1b500 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
1b510 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
1b520 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
1b530 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
1b540 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
1b550 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
1b560 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
1b570 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
1b580 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
1b590 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
1b5a0 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
1b5b0 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
1b5c0 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
1b5d0 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
1b5e0 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
1b5f0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1b600 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
1b610 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
1b620 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
1b630 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1b640 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b650 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
1b660 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
1b670 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  /.};../*.** Retu
1b680 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
1b690 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
1b6a0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
1b6b0 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
1b6c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1b6d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1b6e0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1b6f0 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
1b700 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
1b710 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
1b720 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
1b730 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1b740 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1b750 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b760 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
1b770 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
1b780 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
1b790 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
1b7a0 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
1b7b0 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
1b7c0 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
1b7d0 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
1b7e0 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
1b7f0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
1b800 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
1b810 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
1b820 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
1b830 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1b840 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b850 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
1b860 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
1b870 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
1b880 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
1b890 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
1b8a0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  es..*/.#define O
1b8b0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
1b8c0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
1b8d0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1b8e0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
1b8f0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1b900 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1b910 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1b920 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1b930 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1b940 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1b950 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1b960 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1b970 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1b980 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1b990 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1b9a0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1b9b0 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1b9c0 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1b9d0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1b9e0 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1b9f0 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1ba00 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1ba10 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
1ba20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
1ba30 45 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  E    0x20    /* 
1ba40 43 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62  Clear pseudo-tab
1ba50 6c 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43  le cache in OP_C
1ba60 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
1ba70 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
1ba80 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
1ba90 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1baa0 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
1bab0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1bac0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
1bad0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
1bae0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
1baf0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
1bb00 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1bb10 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
1bb20 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
1bb30 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
1bb40 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
1bb50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
1bb60 49 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32  ISREG       0x02
1bb70 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
1bb80 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
1bb90 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
1bba0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
1bbb0 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
1bbc0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
1bbd0 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
1bbe0 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a  tation */../*. *
1bbf0 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
1bc00 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
1bc10 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
1bc20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
1bc30 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
1bc40 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a  ct Trigger. . *.
1bc50 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
1bc60 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
1bc70 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
1bc80 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
1bc90 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
1bca0 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
1bcb0 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
1bcc0 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
1bcd0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1bce0 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29  . *    database)
1bcf0 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72  . This allows Tr
1bd00 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73  igger structures
1bd10 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64   to be retrieved
1bd20 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20   by name.. * 2. 
1bd30 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73  All triggers ass
1bd40 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73  ociated with a s
1bd50 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d  ingle table form
1bd60 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20   a linked list, 
1bd70 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20  using the. *    
1bd80 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20  pNext member of 
1bd90 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1bda0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
1bdb0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1bdc0 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b  f the. *    link
1bdd0 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65  ed list is store
1bde0 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67  d as the "pTrigg
1bdf0 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  er" member of th
1be00 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20  e associated. * 
1be10 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e     struct Table.
1be20 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70  . *. * The "step
1be30 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f  _list" member po
1be40 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1be50 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c  t element of a l
1be60 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f  inked list. * co
1be70 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
1be80 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
1be90 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69  ified as the tri
1bea0 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger program.. *
1beb0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1bec0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
1bed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bee0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1bef0 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20  trigger         
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1bf10 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b  /.  char *table;
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1bf30 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
1bf40 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
1bf50 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f  igger applies */
1bf60 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1bf70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1bf80 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1bf90 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1bfa0 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
1bfb0 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
1bfc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1bfd0 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f   of TRIGGER_BEFO
1bfe0 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45  RE, TRIGGER_AFTE
1bff0 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
1c000 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
1c010 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
1c020 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
1c030 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ion (may be NULL
1c040 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  ) */.  IdList *p
1c050 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f  Columns;       /
1c060 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  * If this is an 
1c070 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
1c080 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c  n-list> trigger,
1c090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1c0b0 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  e <column-list> 
1c0c0 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
1c0d0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1c0e0 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  ema;        /* S
1c0f0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1c100 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a   the trigger */.
1c110 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63    Schema *pTabSc
1c120 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
1c130 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1c140 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72  he table */.  Tr
1c150 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f  iggerStep *step_
1c160 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69  list; /* Link li
1c170 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72  st of trigger pr
1c180 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20  ogram steps     
1c190 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69          */.  Tri
1c1a0 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20  gger *pNext;    
1c1b0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69       /* Next tri
1c1c0 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  gger associated 
1c1d0 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a  with the table *
1c1e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72  /.};../*.** A tr
1c1f0 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20  igger is either 
1c200 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41  a BEFORE or an A
1c210 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54  FTER trigger.  T
1c220 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
1c230 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d  stants.** determ
1c240 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a  ine which. .**.*
1c250 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
1c260 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
1c270 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
1c280 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
1c290 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
1c2a0 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
1c2b0 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
1c2c0 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
1c2d0 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
1c2e0 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
1c2f0 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
1c300 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
1c310 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
1c320 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1c330 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
1c340 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
1c350 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
1c360 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
1c370 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
1c380 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e  ogram. . *. * In
1c390 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
1c3a0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
1c3b0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
1c3c0 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
1c3d0 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
1c3e0 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
1c3f0 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
1c400 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
1c410 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
1c420 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  e . * associated
1c430 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
1c440 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
1c450 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
1c460 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
1c470 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
1c480 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
1c490 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a  er-program.. * .
1c4a0 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
1c4b0 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
1c4c0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
1c4d0 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
1c4e0 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
1c4f0 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
1c500 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
1c510 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
1c520 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
1c530 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a  mined by the . *
1c540 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
1c550 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
1c560 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
1c570 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
1c580 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
1c590 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
1c5a0 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
1c5b0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1c5c0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1c5d0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
1c5e0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1c600 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
1c610 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
1c620 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
1c630 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74  rwise NULL.. * t
1c640 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1c650 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1c660 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1c670 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
1c680 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
1c690 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
1c6a0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1c6b0 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
1c6c0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1c6d0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1c6e0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
1c6f0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
1c700 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
1c710 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
1c720 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1c730 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1c740 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
1c750 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a  s>) VALUES ... .
1c760 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1c770 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
1c780 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
1c790 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
1c7a0 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
1c7b0 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
1c7c0 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
1c7d0 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72  K_DELETE). * tar
1c7e0 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1c7f0 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1c800 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1c810 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
1c820 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
1c830 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1c840 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
1c850 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
1c860 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1c870 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1c880 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1c890 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
1c8a0 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
1c8b0 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1c8c0 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1c8d0 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1c8e0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
1c8f0 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a  date rows of.. *
1c900 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1c910 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1c920 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1c930 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1c940 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1c950 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1c960 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1c970 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
1c980 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
1c990 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
1c9a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
1c9b0 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
1c9c0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
1c9d0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
1c9e0 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
1c9f0 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
1ca00 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
1ca10 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20     argument.. * 
1ca20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1ca30 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
1ca40 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1ca50 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1ca60 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1ca70 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
1ca80 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
1ca90 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1caa0 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
1cab0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
1cac0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
1cad0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
1cae0 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
1caf0 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
1cb00 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1cb10 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
1cb20 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  tment or RHS of 
1cb30 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53  INSERT INTO .. S
1cb40 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54  ELECT ... */.  T
1cb50 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20  oken target;    
1cb60 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61      /* Target ta
1cb70 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  ble for DELETE, 
1cb80 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a  UPDATE, INSERT *
1cb90 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1cba0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1cbb0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1cbc0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
1cbd0 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  E steps */.  Exp
1cbe0 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74  rList *pExprList
1cbf0 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20  ; /* SET clause 
1cc00 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20  for UPDATE. */. 
1cc10 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
1cc20 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  ;     /* Column 
1cc30 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54  names for INSERT
1cc40 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1cc50 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
1cc60 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
1cc70 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
1cc80 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
1cc90 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
1cca0 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
1ccb0 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
1ccc0 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
1ccd0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1cce0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1ccf0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
1cd00 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
1cd10 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
1cd20 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
1cd30 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
1cd40 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
1cd50 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
1cd60 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70  plicit.  .*/.typ
1cd70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
1cd80 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
1cd90 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
1cda0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1cdb0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
1cdc0 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
1cdd0 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
1cde0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
1cdf0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1ce00 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
1ce10 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
1ce20 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
1ce30 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
1ce40 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
1ce50 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
1ce60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1ce70 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
1ce80 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
1ce90 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
1cea0 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
1ceb0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1cec0 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
1ced0 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1cee0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1cef0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
1cf00 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
1cf10 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
1cf20 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
1cf30 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
1cf40 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
1cf50 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
1cf60 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
1cf70 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
1cf80 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
1cf90 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
1cfa0 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
1cfb0 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
1cfc0 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
1cfd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
1cfe0 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
1cff0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
1d000 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
1d010 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
1d020 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
1d030 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
1d040 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61           /* A ba
1d050 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  se allocation.  
1d060 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e  Not from malloc.
1d070 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
1d080 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
1d090 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
1d0a0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1d0b0 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  nt  nChar;      
1d0c0 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
1d0d0 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
1d0e0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c  ar */.  int  nAl
1d0f0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
1d100 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
1d110 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
1d120 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41  xt */.  int  mxA
1d130 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1d140 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
1d150 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
1d160 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f  .  u8   useMallo
1d170 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f  c;      /* 0: no
1d180 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44  ne,  1: sqlite3D
1d190 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c  bMalloc,  2: sql
1d1a0 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20  ite3_malloc */. 
1d1b0 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20   u8   accError; 
1d1c0 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55        /* STRACCU
1d1d0 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43  M_NOMEM or STRAC
1d1e0 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b  CUM_TOOBIG */.};
1d1f0 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
1d200 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66  M_NOMEM   1.#def
1d210 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f  ine STRACCUM_TOO
1d220 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20  BIG  2../*.** A 
1d230 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
1d240 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
1d250 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
1d260 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1d270 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
1d280 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
1d290 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
1d2a0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
1d2b0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
1d2c0 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
1d2d0 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
1d2e0 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
1d2f0 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
1d300 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
1d310 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
1d320 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
1d330 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
1d340 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d350 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
1d360 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
1d370 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
1d380 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
1d390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1d3a0 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
1d3b0 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74  d here */.} Init
1d3c0 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72  Data;../*.** Str
1d3d0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e  ucture containin
1d3e0 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75  g global configu
1d3f0 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20  ration data for 
1d400 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
1d410 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  ry..**.** This s
1d420 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f  tructure also co
1d430 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74  ntains some stat
1d440 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  e information..*
1d450 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  /.struct Sqlite3
1d460 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62  Config {.  int b
1d470 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20  Memstat;        
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d490 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d  True to enable m
1d4a0 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a  emory status */.
1d4b0 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78    int bCoreMutex
1d4c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d4d0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1d4e0 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78  nable core mutex
1d4f0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75  ing */.  int bFu
1d500 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
1d510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d520 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c  ue to enable ful
1d530 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  l mutexing */.  
1d540 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20  int bOpenUri;   
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74    /* True to int
1d570 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73  erpret filenames
1d580 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e   as URIs */.  in
1d590 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  t bUseCis;      
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5b0 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20  /* Use covering 
1d5c0 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c  indices for full
1d5d0 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  -scans */.  int 
1d5e0 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d600 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
1d610 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
1d620 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d640 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
1d650 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
1d660 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
1d670 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1d680 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1d690 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1d6a0 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
1d6b0 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d6d0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1d6e0 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
1d6f0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
1d700 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
1d710 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
1d720 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
1d730 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
1d740 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1d750 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
1d760 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
1d770 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
1d780 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1d790 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
1d7a0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
1d7b0 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
1d7c0 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
1d7d0 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7f0 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
1d800 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
1d810 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
1d840 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
1d850 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
1d860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1d870 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
1d880 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
1d890 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1d8a0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
1d8b0 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
1d8c0 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
1d8d0 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
1d8e0 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
1d8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1d900 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
1d910 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
1d920 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d940 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
1d950 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
1d960 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1d970 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1d980 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
1d990 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1d9a0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d9c0 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
1d9d0 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
1d9e0 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
1da10 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1da20 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1da40 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
1da50 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
1da60 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1da90 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
1daa0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
1dab0 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
1dac0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
1dad0 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
1dae0 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
1daf0 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
1db00 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
1db10 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1db20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1db30 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f  e enabled */.  /
1db40 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
1db50 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1db60 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
1db70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
1db80 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
1db90 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
1dba0 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
1dbb0 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1dbe0 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
1dbf0 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
1dc00 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
1dc10 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1dc20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
1dc30 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
1dc40 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
1dc50 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
1dc60 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1dc70 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1dc80 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
1dc90 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1dca0 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
1dcb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1dcc0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1dcd0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1dce0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1dcf0 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dd10 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1dd20 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1dd30 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
1dd40 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1dd50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1dd60 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
1dd70 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71  nitMutex */.  sq
1dd80 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
1dd90 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1dda0 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
1ddb0 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
1ddc0 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ize() */.  void 
1ddd0 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
1dde0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
1ddf0 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
1de00 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
1de10 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
1de40 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
1de50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1de60 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76  NABLE_SQLLOG.  v
1de70 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f  oid(*xSqllog)(vo
1de80 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
1de90 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
1dea0 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41    void *pSqllogA
1deb0 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  rg;.#endif.#ifde
1dec0 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f  f SQLITE_VDBE_CO
1ded0 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20  VERAGE.  /* The 
1dee0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61  following callba
1def0 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29  ck (if not NULL)
1df00 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65   is invoked on e
1df10 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68  very VDBE branch
1df20 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  .  ** operation.
1df30 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61    Set the callba
1df40 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ck using SQLITE_
1df50 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f  TESTCTRL_VDBE_CO
1df60 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76  VERAGE..  */.  v
1df70 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63  oid (*xVdbeBranc
1df80 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72  h)(void*,int iSr
1df90 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
1dfa0 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
1dfb0 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
1dfc0 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
1e000 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
1e010 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e020 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
1e030 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
1e040 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
1e050 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
1e060 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
1e070 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
1e080 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
1e090 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
1e0a0 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
1e0b0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
1e0c0 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ls */.};../*.** 
1e0d0 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
1e0e0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
1e0f0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1e100 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
1e110 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
1e120 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
1e130 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
1e140 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
1e150 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
1e160 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
1e170 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
1e180 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1e190 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
1e1a0 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
1e1b0 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
1e1c0 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
1e1d0 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
1e1e0 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
1e1f0 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
1e200 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
1e210 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
1e220 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
1e230 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
1e240 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
1e250 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
1e260 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
1e270 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
1e280 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
1e290 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
1e2a0 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
1e2b0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
1e2c0 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
1e2d0 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
1e2e0 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
1e2f0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
1e300 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
1e310 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
1e320 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
1e330 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
1e340 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
1e350 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
1e360 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
1e370 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
1e380 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
1e390 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
1e3a0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
1e3b0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1e3c0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
1e3d0 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
1e3e0 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1e3f0 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
1e400 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
1e410 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
1e420 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
1e430 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
1e440 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
1e450 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1e460 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
1e470 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
1e4a0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
1e4b0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e4e0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
1e4f0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1e520 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1e530 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1e540 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e560 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1e570 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1e580 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e5b0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f  Integer value */
1e5c0 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
1e5d0 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
1e600 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
1e610 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
1e620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e630 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
1e640 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
1e650 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
1e660 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
1e670 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
1e680 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
1e690 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
1e6a0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
1e6b0 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
1e6c0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1e6d0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
1e6e0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1e6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1e700 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
1e710 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1e720 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1e730 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
1e740 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a  *, Select*);../*
1e750 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
1e760 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
1e770 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
1e780 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
1e790 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
1e7a0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
1e7b0 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
1e7c0 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
1e7d0 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
1e7e0 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
1e7f0 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
1e800 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
1e810 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
1e820 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
1e830 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
1e840 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
1e850 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
1e860 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  lk */../*.** An 
1e870 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1e880 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65   structure repre
1e890 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f  sents a set of o
1e8a0 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a  ne or more CTEs.
1e8b0 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ** (common table
1e8c0 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72   expressions) cr
1e8d0 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c  eated by a singl
1e8e0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a  e WITH clause..*
1e8f0 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a  /.struct With {.
1e900 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20    int nCte;     
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43    /* Number of C
1e930 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20  TEs in the WITH 
1e940 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68  clause */.  With
1e950 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20   *pOuter;       
1e960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1e970 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63  ontaining WITH c
1e980 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
1e990 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b  /.  struct Cte {
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9b0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
1e9c0 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20  CTE in the WITH 
1e9d0 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20  clause.... */.  
1e9e0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
1ea10 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70  s CTE */.    Exp
1ea20 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20  rList *pCols;   
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ea40 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74  List of explicit
1ea50 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f   column names, o
1ea60 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65  r NULL */.    Se
1ea70 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ea90 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
1eaa0 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
1eab0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1eac0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1ead0 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
1eae0 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72  age for circular
1eaf0 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
1eb00 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a   } a[1];.};../*.
1eb10 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
1eb20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1eb30 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
1eb40 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
1eb50 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
1eb60 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
1eb70 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
1eb80 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
1eb90 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
1eba0 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
1ebb0 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
1ebe0 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
1ec10 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
1ec20 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
1ec30 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
1ec40 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
1ec80 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
1ec90 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
1eca0 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
1ecb0 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
1ecc0 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
1ecd0 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
1ece0 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
1ecf0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
1ed00 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
1ed10 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
1ed20 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
1ed30 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
1ed40 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
1ed50 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
1ed60 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
1ed70 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
1ed80 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
1ed90 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
1eda0 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
1edb0 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
1edc0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1edd0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1ede0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1edf0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1ee00 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1ee10 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
1ee20 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1ee30 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
1ee40 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1ee50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
1ee60 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
1ee70 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
1ee80 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
1ee90 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
1eea0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
1eeb0 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
1eec0 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  __).../*.** FTS4
1eed0 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
1eee0 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
1eef0 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
1ef00 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
1ef10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1ef20 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
1ef30 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
1ef40 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74  we also all.** t
1ef50 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
1ef60 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
1ef70 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73  erve as an aliss
1ef80 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  e for SQLITE_ENA
1ef90 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
1efa0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1efb0 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
1efc0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1efd0 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
1efe0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
1eff0 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a  BLE_FTS3.#endif.
1f000 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
1f010 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
1f020 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
1f030 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
1f040 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
1f050 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
1f060 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
1f070 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
1f080 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
1f090 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
1f0a0 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
1f0b0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1f0c0 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
1f0d0 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
1f0e0 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
1f0f0 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
1f100 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
1f110 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
1f120 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
1f130 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
1f140 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
1f150 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
1f160 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
1f170 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
1f180 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
1f190 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
1f1a0 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
1f1b0 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
1f1c0 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
1f1d0 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
1f1e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
1f1f0 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
1f200 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1f210 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
1f220 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1f230 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
1f240 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1f250 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
1f260 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1f270 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1f280 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
1f290 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
1f2a0 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
1f2b0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1f2c0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1f2d0 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
1f2e0 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1f2f0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1f300 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1f310 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
1f320 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1f330 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
1f340 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1f350 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1f360 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
1f370 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1f380 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1f390 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1f3a0 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
1f3b0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1f3c0 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
1f3d0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
1f3e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1f3f0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1f400 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1f410 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
1f420 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1f430 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f440 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
1f450 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
1f460 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1f470 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1f480 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
1f490 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1f4a0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1f4b0 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1f4c0 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
1f4d0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1f4e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
1f4f0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
1f500 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1f510 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1f520 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
1f530 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
1f540 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1f550 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f560 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
1f570 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
1f580 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a  ar)(x)).#endif..
1f590 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
1f5a0 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
1f5b0 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
1f5c0 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
1f5d0 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
1f5e0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
1f5f0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
1f600 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1f610 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
1f620 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
1f630 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
1f640 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1f650 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
1f660 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1f670 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1f680 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1f690 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20  Zero(int);.void 
1f6a0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1f6b0 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69  Zero(sqlite3*, i
1f6c0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1f6d0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
1f6e0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68  lite3*, int);.ch
1f6f0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1f700 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
1f710 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
1f720 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
1f730 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
1f740 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   char*, int);.vo
1f750 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
1f760 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a  oc(void*, int);.
1f770 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1f780 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
1f790 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1f7a0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1f7b0 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
1f7c0 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1f7d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f7e0 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
1f7f0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
1f800 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
1f810 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
1f820 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
1f830 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1f840 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1f850 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
1f860 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f870 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
1f880 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
1f890 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
1f8a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
1f8b0 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
1f8c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
1f8d0 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
1f8e0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
1f8f0 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
1f900 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
1f910 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69  id (*)(void));.i
1f920 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
1f930 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
1f940 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
1f950 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
1f960 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
1f970 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
1f980 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
1f990 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
1f9a0 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
1f9b0 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
1f9c0 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
1f9d0 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
1f9e0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
1f9f0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
1fa00 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
1fa10 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
1fa20 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
1fa30 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
1fa40 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
1fa50 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
1fa60 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
1fa70 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
1fa80 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1fa90 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
1faa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1fab0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1fac0 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
1fad0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1fae0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1faf0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
1fb00 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
1fb10 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
1fb20 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
1fb30 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1fb40 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1fb50 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
1fb60 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
1fb70 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1fb80 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1fb90 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
1fba0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
1fbb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fbc0 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1fbd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1fbe0 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
1fbf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1fc00 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
1fc10 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
1fc20 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
1fc30 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
1fc40 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
1fc50 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1fc60 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
1fc70 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1fc80 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1fc90 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
1fca0 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
1fcb0 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
1fcc0 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
1fcd0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1fce0 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
1fcf0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
1fd00 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1fd10 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1fd20 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
1fd30 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1fd40 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
1fd50 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
1fd60 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
1fd70 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
1fd80 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
1fd90 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1fda0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75  int sqlite3Statu
1fdb0 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
1fdc0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41  d sqlite3StatusA
1fdd0 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  dd(int, int);.vo
1fde0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
1fdf0 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  Set(int, int);..
1fe00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1fe10 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1fe20 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
1fe30 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
1fe40 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1fe50 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
1fe60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1fe70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1fe80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1fe90 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
1fea0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
1feb0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
1fec0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
1fed0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
1fee0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
1fef0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
1ff00 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
1ff10 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
1ff20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1ff30 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
1ff40 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
1ff50 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ff70 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1ff80 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
1ff90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
1ffa0 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
1ffb0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
1ffc0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66  lues */.};..#def
1ffd0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
1ffe0 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a  F_INTERNAL 0x01.
1fff0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
20000 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
20010 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  x02.void sqlite3
20020 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
20030 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63  m*, u32, const c
20040 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
20050 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
20060 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
20070 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
20080 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
20090 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
200a0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
200b0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
200c0 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
200d0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
200e0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68  r*, va_list);.ch
200f0 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65  ar *sqlite3MAppe
20100 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61  ndf(sqlite3*,cha
20110 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  r*,const char*,.
20120 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  ..);.#if defined
20130 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
20140 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
20150 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
20160 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
20170 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
20180 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
20190 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
201a0 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
201b0 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
201c0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
201d0 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74  endif../* Output
201e0 20 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20   formatting for 
201f0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
20200 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64  EXPLAIN */.#if d
20210 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20220 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49  ABLE_TREE_EXPLAI
20230 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  N).  void sqlite
20240 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64  3ExplainBegin(Vd
20250 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
20260 69 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74  ite3ExplainPrint
20270 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  f(Vdbe*, const c
20280 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f  har*, ...);.  vo
20290 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
202a0 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  nNL(Vdbe*);.  vo
202b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
202c0 6e 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  nPush(Vdbe*);.  
202d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
202e0 61 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20  ainPop(Vdbe*);. 
202f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
20300 6c 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a  lainFinish(Vdbe*
20310 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20320 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56  3ExplainSelect(V
20330 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  dbe*, Select*);.
20340 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20350 70 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c  plainExpr(Vdbe*,
20360 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
20370 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
20380 70 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78  prList(Vdbe*, Ex
20390 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73  prList*);.  cons
203a0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  t char *sqlite3V
203b0 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56  dbeExplanation(V
203c0 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  dbe*);.#else.# d
203d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
203e0 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64  lainBegin(X).# d
203f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
20400 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a  lainSelect(A,B).
20410 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20420 45 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29  ExplainExpr(A,B)
20430 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20440 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
20450 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
20460 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e  qlite3ExplainFin
20470 69 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20  ish(X).# define 
20480 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61  sqlite3VdbeExpla
20490 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64  nation(X) 0.#end
204a0 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
204b0 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
204c0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
204d0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
204e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
204f0 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
20500 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
20510 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75  .int sqlite3Dequ
20520 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20  ote(char*);.int 
20530 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
20540 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
20550 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
20560 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
20570 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
20580 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
20590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
205a0 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
205b0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
205c0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
205d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
205e0 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
205f0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
20600 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
20610 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
20620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
20630 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
20640 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
20650 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
20660 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
20670 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  se*);.Expr *sqli
20680 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
20690 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
206a0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
206b0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
206c0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
206d0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
206e0 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
206f0 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
20700 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
20710 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
20720 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
20730 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
20740 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
20750 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
20760 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
20770 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
20780 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
20790 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
207a0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
207b0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
207c0 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
207d0 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
207e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
207f0 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
20800 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
20810 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
20820 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
20830 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
20840 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
20850 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
20860 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
20870 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
20880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20890 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
208a0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
208b0 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
208c0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
208d0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
208e0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
208f0 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
20900 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
20910 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
20920 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
20930 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
20940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
20950 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
20960 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
20970 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
20980 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
20990 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
209a0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
209b0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
209c0 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
209d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
209e0 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
209f0 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
20a00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
20a10 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
20a20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20a30 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
20a40 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a  Changes(sqlite3*
20a50 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
20a60 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
20a70 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
20a80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20a90 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
20aa0 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
20ab0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
20ac0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
20ad0 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
20ae0 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
20af0 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
20b00 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
20b10 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
20b20 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
20b30 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
20b40 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
20b50 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
20b60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
20b70 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
20b80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20b90 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
20ba0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
20bb0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
20bc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20bd0 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
20be0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
20bf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
20c00 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
20c10 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
20c20 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
20c30 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
20c40 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
20c50 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
20c60 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
20c70 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
20c80 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
20c90 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
20ca0 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
20cb0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
20cc0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
20cd0 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
20ce0 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
20d00 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
20d10 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
20d20 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
20d30 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
20d40 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
20d50 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
20d60 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  ce(Parse *);..#i
20d70 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
20d80 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20  _BUILTIN_TEST.# 
20d90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
20da0 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
20db0 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
20dc0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
20dd0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
20de0 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
20df0 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
20e00 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
20e10 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
20e20 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
20e30 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
20e40 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
20e50 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
20e60 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
20e70 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
20e80 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
20e90 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
20ea0 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
20eb0 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73  (Bitvec*);.int s
20ec0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
20ed0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
20ee0 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  );..RowSet *sqli
20ef0 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
20f00 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
20f10 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
20f20 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
20f30 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
20f40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
20f50 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
20f60 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
20f70 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
20f80 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
20f90 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
20fa0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
20fb0 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
20fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
20fd0 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
20fe0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
20ff0 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  n*,Select*,int,i
21000 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
21010 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
21020 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
21030 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
21040 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
21050 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
21060 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
21070 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
21080 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21090 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
210a0 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
210b0 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  f..#if SQLITE_MA
210c0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
210d0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73  int sqlite3DbMas
210e0 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b  kAllZero(yDbMask
210f0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
21100 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
21110 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
21120 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21130 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
21140 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
21150 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
21160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
21170 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
21180 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66  3*, Table*);.#if
21190 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
211a0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
211b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
211c0 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
211d0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
211e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
211f0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
21200 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
21210 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21220 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
21230 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
21240 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
21250 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
21260 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
21270 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
21280 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
21290 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
212a0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
212b0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
212c0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
212d0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
212e0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
212f0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
21300 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
21310 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
21320 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
21330 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
21340 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
21350 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
21360 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
21370 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
21380 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
21390 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
213a0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
213b0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
213c0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
213d0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
213e0 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
213f0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
21400 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21430 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
21440 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
21450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21460 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
21470 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
21480 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
21490 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
214a0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
214b0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
214c0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
214d0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
214e0 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
214f0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
21500 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
21510 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
21520 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
21530 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
21540 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
21550 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
21560 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
21570 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
21580 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
21590 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
215a0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
215b0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
215c0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
215d0 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
215e0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
215f0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
21600 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21620 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
21630 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21640 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
21650 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
21660 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
21670 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
21680 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
21690 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
216a0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
216b0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
216c0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
216d0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216f0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
21700 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
21710 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
21720 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
21730 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
21740 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
21750 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
21760 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
21770 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
21780 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
21790 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
217a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
217b0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
217c0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
217d0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
217e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
217f0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
21800 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
21810 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
21820 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
21830 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
21840 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
21850 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
21860 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
21870 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
21880 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
21890 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
218a0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
218b0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
218c0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
218d0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
218e0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
218f0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
21900 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
21910 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
21920 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
21930 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
21940 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21950 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
21960 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
21970 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
21980 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
21990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
219a0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
219b0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
219c0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
219d0 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
219e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
219f0 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
21a00 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
21a10 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
21a20 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
21a30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
21a40 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(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 4f 6b 4f 6e 65 50  lite3WhereOkOneP
21a70 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
21a80 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
21a90 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
21aa0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
21ab0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
21ac0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
21ad0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
21ae0 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
21af0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
21b00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21b10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
21b20 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
21b30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21b40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
21b50 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
21b60 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
21b70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21b80 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
21b90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21ba0 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
21bb0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21bc0 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65  3ExprCacheRemove
21bd0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
21be0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21bf0 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50  ExprCacheClear(P
21c00 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21c10 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66  ite3ExprCacheAff
21c20 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73  inityChange(Pars
21c30 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
21c40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21c50 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
21c60 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
21c70 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
21c80 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
21c90 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
21ca0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
21cb0 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
21cc0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  Expr*, int, u8);
21cd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
21ce0 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
21cf0 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
21d00 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
21d10 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
21d20 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
21d30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
21d40 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
21d50 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
21d60 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
21d70 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
21d80 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
21d90 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
21da0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
21db0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
21dc0 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
21dd0 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
21de0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
21df0 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
21e00 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
21e10 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f  tant terms */.vo
21e20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
21e30 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
21e40 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
21e50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
21e60 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
21e70 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
21e80 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
21e90 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
21ea0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
21eb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
21ec0 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
21ed0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e  eTable(Parse*,in
21ee0 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63  t isView,const c
21ef0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
21f00 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
21f10 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65  e3LocateTableIte
21f20 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  m(Parse*,int isV
21f30 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69  iew,struct SrcLi
21f40 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
21f50 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
21f60 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
21f70 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
21f80 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21f90 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
21fa0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
21fb0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
21fc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21fd0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
21fe0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
21ff0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
22000 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
22010 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  um(Parse*);.int 
22020 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
22030 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
22040 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
22050 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
22060 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
22070 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22080 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20  rCompare(Expr*, 
22090 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
220a0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
220b0 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
220c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
220d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
220e0 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45  xprImpliesExpr(E
220f0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
22100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22110 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
22120 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
22130 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
22140 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
22150 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
22160 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
22170 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
22180 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
22190 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
221a0 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
221b0 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
221c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
221d0 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
221e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
221f0 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
22200 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
22210 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
22220 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
22230 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
22240 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
22250 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22260 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
22270 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
22280 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
22290 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
222a0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
222b0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
222c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
222d0 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
222e0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
222f0 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
22300 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
22310 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
22320 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
22330 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
22340 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
22350 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
22360 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22370 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
22380 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
22390 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
223a0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
223b0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
223c0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
223d0 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
223e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
223f0 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
22400 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  on(Expr*);.int s
22410 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
22420 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
22430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22440 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
22450 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
22460 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
22470 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
22480 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
22490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
224a0 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
224b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
224c0 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
224d0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54  (Parse*,Table*,T
224e0 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
224f0 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
22500 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
22510 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
22520 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
22530 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
22540 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
22550 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
22560 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ey(Parse*, Index
22570 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22580 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e  , int*,Index*,in
22590 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
225a0 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
225b0 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  bel(Parse*,int);
225c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
225d0 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
225e0 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
225f0 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
22600 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
22630 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  8,u8,int,int*);.
22640 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
22650 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
22660 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
22670 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
22680 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
22690 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
226a0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
226b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
226c0 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
226d0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
226e0 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
226f0 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
22700 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22710 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
22720 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
22730 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
22740 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22750 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
22760 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
22770 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
22780 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
22790 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
227a0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
227b0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
227c0 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
227d0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
227e0 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
227f0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
22800 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
22810 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
22820 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
22830 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
22840 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
22850 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
22860 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
22870 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
22880 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
22890 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
228a0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
228b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
228c0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
228d0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
228e0 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
228f0 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
22900 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
22910 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
22920 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
22930 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
22940 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
22950 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
22960 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
22970 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
22980 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
22990 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
229a0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
229b0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
229c0 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
229d0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
229e0 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
229f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
22a00 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
22a10 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
22a20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22a30 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
22a40 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
22a50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22a60 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
22a70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22a80 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
22a90 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
22aa0 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
22ab0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
22ac0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
22ad0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22ae0 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
22af0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
22b00 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
22b10 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
22b20 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
22b30 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
22b50 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
22b60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
22b70 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
22b80 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
22b90 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
22ba0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
22bb0 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
22bc0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
22bd0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
22be0 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
22bf0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
22c00 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
22c10 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
22c20 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
22c30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22c40 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
22c50 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
22c60 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
22c70 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
22c80 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
22c90 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
22ca0 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
22cb0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
22cc0 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
22cf0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
22d00 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
22d10 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
22d20 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
22d30 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
22d40 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
22d50 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
22d60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
22d70 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
22d80 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
22d90 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
22da0 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
22db0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
22dc0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
22dd0 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
22de0 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
22df0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
22e00 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
22e10 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
22e20 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
22e30 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29       Select*,u8)
22e70 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
22e80 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
22e90 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
22ea0 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
22eb0 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
22ec0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22ed0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
22ee0 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
22ef0 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
22f00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22f10 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
22f20 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
22f30 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22f40 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
22f50 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
22f60 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
22f70 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
22f80 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
22f90 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
22fa0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
22fb0 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
22fc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
22fd0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
22fe0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
22ff0 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
23000 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
23010 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
23020 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
23030 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
23040 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
23050 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
23060 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
23070 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
23080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
23090 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
230a0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
230b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
230c0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
230d0 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
230e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
230f0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
23100 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
23110 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23120 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
23130 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
23140 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
23150 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
23160 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
23170 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
23180 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
23190 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
231a0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
231b0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
231c0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
231d0 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
231e0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
231f0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
23200 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
23210 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
23220 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
23230 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
23240 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
23250 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
23260 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
23270 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
23280 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
23290 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
232a0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
232b0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
232c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
232d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
232e0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
232f0 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
23300 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
23310 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
23320 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
23330 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
23340 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
23350 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
23360 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
23370 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
23380 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
23390 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
233a0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
233b0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
233c0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
233d0 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
233e0 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
233f0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
23400 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
23410 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
23420 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
23430 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
23440 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
23450 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
23460 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
23470 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
23480 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
23490 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
234a0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
234b0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
234c0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
234d0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
234e0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
234f0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
23500 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
23510 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
23520 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
23530 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
23540 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
23550 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23560 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
23570 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
23580 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23590 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
235a0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
235b0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
235c0 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
235d0 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
235e0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
235f0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
23600 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
23610 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
23620 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
23630 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
23640 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
23650 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
23660 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
23670 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
23680 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
23690 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
236a0 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
236b0 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
236c0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
236d0 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
236e0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
236f0 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
23700 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
23710 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23720 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
23730 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
23740 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
23750 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  f.u64 sqlite3Log
23760 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
23770 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
23780 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
23790 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
237a0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
237b0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
237c0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
237d0 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
237e0 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
237f0 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
23800 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
23810 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
23820 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
23830 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
23840 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
23850 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
23860 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
23870 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
23880 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
23890 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
238a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
238b0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
238c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
238d0 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
238e0 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
238f0 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
23900 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
23910 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
23920 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
23930 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
23940 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
23950 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
23960 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
23970 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
23980 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
23990 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
239a0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
239b0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
239c0 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
239d0 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
239e0 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
239f0 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
23a00 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
23a10 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
23a20 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
23a30 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
23a40 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
23a50 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
23a60 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
23a70 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
23a80 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
23a90 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
23aa0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
23ab0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
23ac0 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
23ad0 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
23ae0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
23af0 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
23b00 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
23b10 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
23b20 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
23b30 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
23b40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
23b50 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
23b60 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
23b70 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
23b80 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
23b90 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
23ba0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
23bb0 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
23bc0 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
23bd0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
23be0 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
23bf0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
23c00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
23c10 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
23c20 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
23c30 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
23c40 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
23c50 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
23c60 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
23c70 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
23c80 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
23c90 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
23ca0 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
23cb0 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
23cc0 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
23cd0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
23ce0 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
23cf0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
23d00 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68  _TEST) .const ch
23d10 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
23d20 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
23d30 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
23d40 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
23d50 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
23d60 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
23d70 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
23d80 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
23d90 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
23da0 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
23db0 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
23dc0 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
23dd0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
23de0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
23df0 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
23e00 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
23e10 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
23e20 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
23e30 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
23e40 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
23e50 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
23e60 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
23e70 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
23e80 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
23e90 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
23ea0 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
23eb0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
23ec0 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
23ed0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
23ee0 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
23ef0 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
23f00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
23f10 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
23f20 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
23f30 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
23f40 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
23f50 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
23f60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
23f70 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
23f80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
23f90 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
23fa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
23fb0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
23fc0 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
23fd0 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
23fe0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
23ff0 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
24000 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
24010 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
24020 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
24030 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
24040 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
24050 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
24060 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
24070 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
24080 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
24090 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
240a0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
240b0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
240c0 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
240d0 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
240e0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
240f0 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
24100 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
24110 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24130 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
24140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
24150 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
24160 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
24170 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
24180 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
24190 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
241a0 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
241b0 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
241c0 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
241d0 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
241e0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
241f0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
24200 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
24210 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
24220 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
24230 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
24240 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
24250 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
24260 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
24270 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
24280 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
24290 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
242a0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
242b0 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
242c0 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
242d0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
242e0 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
242f0 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
24300 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
24310 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
24320 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
24330 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
24340 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
24350 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
24360 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
24370 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
24380 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  g;.extern SQLITE
24390 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68  _WSD FuncDefHash
243a0 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75   sqlite3GlobalFu
243b0 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
243c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
243d0 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
243e0 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
243f0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
24400 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
24410 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
24420 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
24430 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24440 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
24450 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
24460 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
24470 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
24480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
24490 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
244a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
244b0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
244c0 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
244d0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
244e0 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
244f0 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
24500 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
24510 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
24520 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
24530 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
24540 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
24550 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
24560 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c  bselect(Parse *,
24570 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
24580 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24590 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
245a0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
245b0 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  Context*);.int s
245c0 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
245d0 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
245e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
245f0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24600 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
24610 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
24620 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
24630 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
24640 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
24650 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
24660 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
24670 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
24680 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
24690 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65  fReference(Parse
246a0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70  *,Table*,int,Exp
246b0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  r*,ExprList*);.i
246c0 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
246d0 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61  eOrderGroupBy(Pa
246e0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  rse*, Select*, E
246f0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
24700 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
24710 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
24720 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  t(Vdbe *, Table 
24730 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
24740 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
24750 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50  inishAddColumn(P
24760 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  arse *, Token *)
24770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
24780 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d  terBeginAddColum
24790 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  n(Parse *, SrcLi
247a0 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  st *);.CollSeq *
247b0 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
247c0 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
247d0 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
247e0 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
247f0 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
24800 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a  const char*, u8*
24810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24820 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
24830 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
24840 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
24850 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
24860 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
24870 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
24880 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
24890 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
248a0 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
248b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
248c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
248d0 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
248e0 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
248f0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
24900 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
24910 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
24920 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
24930 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
24940 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
24950 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
24960 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
24970 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
24980 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
24990 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
249a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
249b0 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
249c0 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
249d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
249e0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
249f0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
24a00 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
24a10 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
24a20 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
24a30 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
24a40 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
24a50 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
24a60 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
24a70 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
24a80 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
24a90 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
24aa0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
24ab0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
24ac0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
24ad0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
24ae0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
24af0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
24b00 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
24b10 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
24b20 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
24b30 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
24b40 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
24b50 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
24b60 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
24b70 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
24b80 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20  void *, .  void 
24b90 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
24ba0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
24bb0 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
24bc0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
24bd0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
24be0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
24bf0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
24c00 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e  context*),.  Fun
24c10 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
24c20 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20  structor.);.int 
24c30 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
24c40 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
24c50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
24c60 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
24c70 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
24c80 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
24c90 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61  t(StrAccum*, cha
24ca0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
24cb0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
24cc0 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
24cd0 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
24ce0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24cf0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
24d00 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
24d10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
24d20 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70   sqlite3AppendSp
24d30 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  ace(StrAccum*,in
24d40 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
24d50 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
24d60 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
24d70 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
24d80 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
24d90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
24da0 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
24db0 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
24dc0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
24dd0 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
24de0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
24df0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
24e00 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
24e10 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
24e20 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
24e30 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
24e40 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
24e50 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
24e60 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
24e70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
24e80 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
24e90 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
24ea0 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
24eb0 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
24ec0 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
24ed0 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
24ee0 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
24ef0 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
24f00 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
24f10 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
24f20 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
24f30 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
24f40 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
24f50 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
24f60 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
24f70 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
24f80 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
24f90 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
24fa0 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
24fb0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
24fc0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
24fd0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
24fe0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
24ff0 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
25000 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
25010 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
25020 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20  (size_t));.void 
25030 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65  sqlite3ParserFre
25040 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29  e(void*, void(*)
25050 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
25060 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
25070 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
25080 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
25090 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
250a0 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
250b0 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
250c0 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
250d0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
250e0 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
250f0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
25100 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25110 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
25120 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
25130 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
25140 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
25150 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
25160 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
25170 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
25180 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
25190 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
251a0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
251b0 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
251c0 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
251d0 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
251e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
251f0 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
25200 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
25210 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
25220 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
25230 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
25240 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
25250 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25260 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
25270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25280 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
25290 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
252a0 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
252b0 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
252c0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
252d0 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
252e0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
252f0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
25300 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
25310 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
25320 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
25330 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71  X) .#  define sq
25340 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
25350 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
25360 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
25370 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
25380 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
25390 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
253a0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
253b0 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
253c0 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
253d0 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
253e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
253f0 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
25400 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
25410 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
25420 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
25430 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
25440 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
25450 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
25460 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
25470 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
25480 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
25490 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
254a0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
254b0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
254c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
254d0 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
254e0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
254f0 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
25500 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
25510 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
25520 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
25530 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
25540 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
25550 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
25560 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
25570 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
25580 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
25590 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
255a0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
255b0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
255c0 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20  le*);.#  define 
255d0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
255e0 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
255f0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
25600 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
25610 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  if.void sqlite3V
25620 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
25630 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
25640 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
25650 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
25660 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
25670 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
25680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
25690 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
256a0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
256b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
256c0 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
256d0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
256e0 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
256f0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
25700 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
25710 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
25720 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
25730 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
25740 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
25750 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
25760 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
25770 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
25780 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
25790 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
257a0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
257b0 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
257c0 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
257d0 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
257e0 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
257f0 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
25800 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
25810 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
25820 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
25830 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
25840 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
25850 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
25860 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
25870 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
25880 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
25890 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
258a0 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
258b0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
258c0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
258d0 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
258e0 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
258f0 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
25900 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
25910 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
25920 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
25930 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
25940 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25950 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
25960 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
25970 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
25980 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
25990 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
259a0 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
259b0 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
259c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
259d0 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
259e0 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
259f0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
25a00 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
25a10 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
25a20 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
25a30 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
25a40 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
25a50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
25a60 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
25a70 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
25a80 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
25a90 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
25aa0 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
25ab0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
25ac0 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
25ad0 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
25ae0 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
25af0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
25b00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25b10 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
25b20 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
25b30 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
25b40 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
25b50 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
25b60 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
25b70 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
25b80 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
25b90 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
25ba0 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
25bb0 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
25bc0 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
25bd0 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
25be0 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
25bf0 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
25c00 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
25c10 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
25c20 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
25c30 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
25c40 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
25c50 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
25c60 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
25c70 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
25c80 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
25c90 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
25ca0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
25cb0 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
25cc0 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
25cd0 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
25ce0 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
25cf0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a  ctionality is .*
25d00 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
25d10 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
25d20 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
25d30 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
25d40 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
25d50 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
25d60 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
25d70 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
25d80 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
25d90 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
25da0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
25db0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
25dc0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
25dd0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25de0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
25df0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
25e00 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
25e10 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
25e20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
25e30 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
25e40 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
25e50 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
25e60 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
25e70 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
25e80 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
25e90 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
25ea0 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
25eb0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
25ec0 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
25ed0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
25ee0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
25ef0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
25f00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
25f10 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
25f20 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
25f30 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
25f40 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
25f50 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
25f60 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
25f70 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25f80 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
25f90 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69  ,c,d)    0.#endi
25fa0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
25fb0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
25fc0 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
25fd0 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
25fe0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
25ff0 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
26000 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
26010 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
26020 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
26030 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
26040 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
26050 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26060 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
26070 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
26080 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
26090 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
260a0 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
260b0 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
260c0 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
260d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
260e0 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
260f0 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
26100 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
26110 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
26120 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
26130 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
26140 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
26150 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
26160 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
26170 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
26180 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
26190 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f  sent if SQLITE_O
261a0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
261b0 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  .** is not defin
261c0 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
261d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
261e0 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  IN_TEST.  void s
261f0 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
26200 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20  nMalloc(void);. 
26210 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64   void sqlite3End
26220 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
26230 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  d);.#else.  #def
26240 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ine sqlite3Begin
26250 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20  BenignMalloc(). 
26260 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26270 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
26280 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
26290 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
262a0 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
262b0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a  e3FindInIndex().
262c0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
262d0 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
262e0 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74   1   /* Search t
262f0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
26300 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
26310 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20   IN_INDEX_EPH   
26320 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65         2   /* Se
26330 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61  arch an ephemera
26340 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66  l b-tree */.#def
26350 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
26360 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a  EX_ASC    3   /*
26370 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
26380 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ASCENDING */.#de
26390 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
263a0 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f  DEX_DESC   4   /
263b0 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
263c0 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23   DESCENDING */.#
263d0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
263e0 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20  NOOP         5  
263f0 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61   /* No table ava
26400 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70  ilable. Use comp
26410 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a  arisons */./*.**
26420 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66   Allowed flags f
26430 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d  or the 3rd param
26440 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46  eter to sqlite3F
26450 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f  indInIndex()..*/
26460 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
26470 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78  X_NOOP_OK     0x
26480 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72  0001  /* OK to r
26490 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e  eturn IN_INDEX_N
264a0 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  OOP */.#define I
264b0 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48  N_INDEX_MEMBERSH
264c0 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49  IP  0x0002  /* I
264d0 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
264e0 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74  for membership t
264f0 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  est */.#define I
26500 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20  N_INDEX_LOOP    
26510 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49      0x0004  /* I
26520 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
26530 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74  as a loop */.int
26540 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
26550 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
26560 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b  r *, u32, int*);
26570 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26580 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
26590 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
265a0 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
265b0 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
265c0 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
265d0 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
265e0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
265f0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
26600 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20  lite3_vfs *);.  
26610 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
26620 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
26630 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20  _file *);.  int 
26640 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
26650 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c  ists(sqlite3_fil
26660 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23  e *p);.#else.  #
26670 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
26680 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20  urnalSize(pVfs) 
26690 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c  ((pVfs)->szOsFil
266a0 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  e).  #define sql
266b0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
266c0 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76  s(p) 1.#endif..v
266d0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
266e0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
266f0 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73  3_file *);.int s
26700 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
26710 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20  Size(void);.int 
26720 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72  sqlite3IsMemJour
26730 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  nal(sqlite3_file
26740 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45   *);..#if SQLITE
26750 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
26760 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  0.  void sqlite3
26770 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50 61  ExprSetHeight(Pa
26780 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
26790 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c  r *p);.  int sql
267a0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
267b0 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
267c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
267d0 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
267e0 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
267f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26800 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
26810 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
26820 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
26830 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
26840 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
26850 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
26860 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
26870 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
26880 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
26890 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
268a0 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
268b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
268c0 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
268d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
268e0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
268f0 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
26900 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
26910 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
26920 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
26930 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
26940 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
26950 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
26960 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
26970 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
26980 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
26990 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
269a0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
269b0 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
269c0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
269d0 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
269e0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
269f0 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
26a00 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
26a10 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
26a20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
26a30 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
26a40 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
26a50 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
26a60 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
26a70 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
26a80 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
26a90 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
26aa0 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
26ab0 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
26ac0 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23   messages. .*/.#
26ad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26ae0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
26af0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
26b00 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
26b10 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
26b20 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
26b30 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
26b40 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
26b50 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
26b60 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72  id (*sqlite3IoTr
26b70 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
26b80 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
26b90 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
26ba0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26bb0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
26bc0 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
26bd0 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
26be0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
26bf0 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
26c00 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
26c10 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
26c20 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
26c30 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
26c40 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
26c50 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
26c60 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
26c70 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
26c80 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
26c90 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
26ca0 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
26cb0 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
26cc0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
26cd0 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
26ce0 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
26cf0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
26d00 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
26d10 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
26d20 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
26d30 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
26d40 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
26d50 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
26d60 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
26d70 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
26d80 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
26d90 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
26da0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
26db0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26dc0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
26dd0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
26de0 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
26df0 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
26e00 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
26e10 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
26e20 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
26e30 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
26e40 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
26e50 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
26e60 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
26e70 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
26e80 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
26e90 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
26ea0 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
26eb0 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
26ec0 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
26ed0 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
26ee0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
26ef0 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
26f00 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
26f10 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
26f20 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
26f30 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
26f40 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
26f50 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
26f60 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
26f70 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
26f80 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
26f90 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
26fa0 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
26fb0 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
26fc0 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
26fd0 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
26fe0 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
26ff0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
27000 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
27010 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
27020 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
27030 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
27040 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
27050 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
27060 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
27070 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
27080 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
27090 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
270a0 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
270b0 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
270c0 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  nt. .**.** All o
270d0 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
270e0 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
270f0 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
27100 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
27110 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
27120 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
27130 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
27140 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
27150 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
27160 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
27170 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
27180 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
27190 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
271a0 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
271b0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
271c0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
271d0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
271e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
271f0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
27200 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
27210 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
27220 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
27230 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
27240 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
27250 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
27260 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
27270 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
27280 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
27290 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
272a0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
272b0 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
272c0 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d  SIDE  0x02  /* M
272d0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
272e0 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20  ookaside memory 
272f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
27300 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
27310 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
27320 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
27330 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
27340 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
27350 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
27360 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
27370 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20  ine MEMTYPE_DB  
27380 20 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20         0x10  /* 
27390 55 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61  Uses sqlite3DbMa
273a0 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65  lloc, not sqlite
273b0 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64  _malloc */..#end
273c0 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54  if /* _SQLITEINT
273d0 5f 48 5f 20 2a 2f 0a                             _H_ */.