/ Hex Artifact Content
Login

Artifact 80d0bb053ef728896142c4e808bfcdc49494e9be:


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 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
3aa0: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
3ab0: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
3ac0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
3ad0: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
3ae0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
3af0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
3b00: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
3b10: 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f  ), set it .** to
3b20: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
3b30: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
3b40: 3d 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  =3.# undef SQLIT
3b50: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3b60: 45 41 44 53 0a 23 65 6e 64 69 66 0a 23 69 66 6e  EADS.#endif.#ifn
3b70: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3b80: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3b90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3ba0: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3bb0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
3bc0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3bd0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3be0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3bf0: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3c00: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
3c10: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
3c20: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
3c30: 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  S>SQLITE_MAX_WOR
3c40: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e  KER_THREADS.# un
3c50: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3c60: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3c70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3c80: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3c90: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3ca0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
3cb0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43  endif.../*.** GC
3cc0: 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  C does not defin
3cd0: 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29  e the offsetof()
3ce0: 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20   macro so we'll 
3cf0: 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a  have to do it.**
3d00: 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23   ourselves..*/.#
3d10: 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a  ifndef offsetof.
3d20: 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66  #define offsetof
3d30: 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44  (STRUCTURE,FIELD
3d40: 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29  ) ((int)((char*)
3d50: 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29  &((STRUCTURE*)0)
3d60: 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66  ->FIELD)).#endif
3d70: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
3d80: 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75  o compute minimu
3d90: 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66  m and maximum of
3da0: 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f   two numbers..*/
3db0: 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42  .#define MIN(A,B
3dc0: 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28  ) ((A)<(B)?(A):(
3dd0: 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28  B)).#define MAX(
3de0: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
3df0: 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68  ):(B))../*.** Ch
3e00: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
3e10: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
3e20: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
3e30: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
3e40: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
3e50: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
3e60: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
3e70: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
3e80: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
3e90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
3ea0: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
3eb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
3ec0: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
3ed0: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
3ee0: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
3ef0: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
3f00: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
3f10: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
3f20: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
3f30: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
3f40: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
3f50: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
3f60: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
3f70: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
3f80: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
3f90: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
3fa0: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
3fb0: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
3fc0: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
3fd0: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
3fe0: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
3ff0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4000: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
4010: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
4020: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
4030: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4040: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
4050: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
4060: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
4070: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4080: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
4090: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
40a0: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
40b0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
40c0: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
40d0: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
40e0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
40f0: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
4100: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
4110: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
4120: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
4130: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
4140: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
4150: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4160: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
4170: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4180: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
4190: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
41a0: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
41b0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
41c0: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
41d0: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
41e0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
41f0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4200: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
4210: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
4220: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4230: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
4240: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
4250: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4260: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
4270: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
4280: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
4290: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
42a0: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
42b0: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
42c0: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
42d0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
42e0: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
42f0: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
4300: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
4310: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4320: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
4330: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
4340: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
4350: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4360: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
4370: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
4380: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
4390: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
43a0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
43b0: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
43c0: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
43d0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
43e0: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
43f0: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
4400: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
4410: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4420: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
4430: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
4440: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
4450: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
4460: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
4470: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
4480: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
4490: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
44a0: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
44b0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
44c0: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
44d0: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
44e0: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
44f0: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
4500: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
4510: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
4520: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
4530: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
4540: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
4550: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
4560: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
4570: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
4580: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
4590: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
45a0: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
45b0: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
45c0: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
45d0: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
45e0: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
45f0: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
4600: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4610: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
4620: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
4630: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
4640: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
4650: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
4660: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
4670: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
4680: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
4690: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
46a0: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
46b0: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
46c0: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
46d0: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
46e0: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
46f0: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
4700: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
4710: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
4720: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
4730: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
4740: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
4750: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
4760: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
4770: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
4780: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
4790: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
47a0: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
47b0: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
47c0: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
47d0: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
47e0: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
47f0: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
4800: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
4810: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
4820: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
4830: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
4840: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
4850: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
4860: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
4870: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
4880: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
4890: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
48a0: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
48b0: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
48c0: 73 74 20 71 75 61 6e 74 61 74 69 65 73 20 61 72  st quantaties ar
48d0: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
48e0: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
48f0: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
4900: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
4910: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
4920: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
4930: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
4940: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
4950: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
4960: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
4970: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
4980: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
4990: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
49a0: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
49b0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
49c0: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
49d0: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
49e0: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
49f0: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
4a00: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
4a10: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
4a20: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
4a30: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
4a40: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
4a50: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
4a60: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
4a70: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
4a80: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
4a90: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
4aa0: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
4ab0: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
4ac0: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a  ional values. .*
4ad0: 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a  * Examples:.**.*
4ae0: 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20  *    0.5 -> -10 
4af0: 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e            0.1 ->
4b00: 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36   -33        0.06
4b10: 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70  25 -> -40.*/.typ
4b20: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
4b30: 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d  LogEst;../*.** M
4b40: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
4b50: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
4b60: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
4b70: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
4b80: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
4b90: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
4ba0: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
4bb0: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
4bc0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
4bd0: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
4be0: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
4bf0: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
4c00: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
4c10: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
4c20: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
4c30: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
4c40: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
4c50: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
4c60: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
4c70: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
4c80: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
4c90: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
4ca0: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  time..*/.#ifdef 
4cb0: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
4cc0: 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71  ION.const int sq
4cd0: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65  lite3one = 1;.#e
4ce0: 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  lse.extern const
4cf0: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b   int sqlite3one;
4d00: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
4d10: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
4d20: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
4d30: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
4d40: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
4d50: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
4d60: 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69  _x86_64) || defi
4d70: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20  ned(__x86_64__) 
4d80: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36  || defined(_M_X6
4d90: 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  4)  ||    \.    
4da0: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36   defined(_M_AMD6
4db0: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  4) || defined(_M
4dc0: 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66  _ARM)     || def
4dd0: 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c  ined(__x86)   ||
4de0: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
4df0: 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20  ed(__arm__)) && 
4e00: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
4e10: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
4e20: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
4e30: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
4e40: 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51  1234.# define SQ
4e50: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
4e60: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
4e70: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
4e80: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
4e90: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
4ea0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
4eb0: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
4ec0: 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20  ed(sparc)    || 
4ed0: 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29  defined(__ppc__)
4ee0: 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66  )  \.    && !def
4ef0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
4f00: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
4f10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
4f20: 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31  YTEORDER    4321
4f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4f40: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
4f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4f60: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
4f70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
4f80: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
4f90: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69  TE_UTF16BE.#endi
4fa0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
4fb0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29  QLITE_BYTEORDER)
4fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4fd0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
4fe0: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
4ff0: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
5000: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
5010: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
5020: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
5030: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
5040: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
5050: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5060: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
5070: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
5080: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5090: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
50a0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
50b0: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
50c0: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
50d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
50e0: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
50f0: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
5100: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
5110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
5120: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
5130: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
5140: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
5150: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
5160: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
5170: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
5180: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
5190: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
51a0: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
51b0: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
51c0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
51d0: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
51e0: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a  EST_INT64)../* .
51f0: 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75  ** Round up a nu
5200: 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  mber to the next
5210: 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65   larger multiple
5220: 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20   of 8.  This is 
5230: 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65  used.** to force
5240: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   8-byte alignmen
5250: 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68  t on 64-bit arch
5260: 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64  itectures..*/.#d
5270: 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20  efine ROUND8(x) 
5280: 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29      (((x)+7)&~7)
5290: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f  ../*.** Round do
52a0: 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73  wn to the neares
52b0: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a  t multiple of 8.
52c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
52d0: 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37  DOWN8(x) ((x)&~7
52e0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20  )../*.** Assert 
52f0: 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72  that the pointer
5300: 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f   X is aligned to
5310: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
5320: 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61  ary.  This.** ma
5330: 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  cro is used only
5340: 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29   within assert()
5350: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
5360: 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a  the code gets.**
5370: 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72   all alignment r
5380: 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72  estrictions corr
5390: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70  ect..**.** Excep
53a0: 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42  t, if SQLITE_4_B
53b0: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
53c0: 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  OC is defined, t
53d0: 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72  hen the.** under
53e0: 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69  lying malloc() i
53f0: 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67 68  mplemention migh
5400: 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79  t return us 4-by
5410: 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f  te aligned.** po
5420: 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74  inters.  In that
5430: 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69   case, only veri
5440: 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d  fy 4-byte alignm
5450: 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ent..*/.#ifdef S
5460: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
5470: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65  GNED_MALLOC.# de
5480: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
5490: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
54a0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
54b0: 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a  char*)0)&3)==0).
54c0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
54d0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
54e0: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
54f0: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
5500: 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66  0)&7)==0).#endif
5510: 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20  ../*.** Disable 
5520: 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d  MMAP on platform
5530: 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e  s where it is kn
5540: 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a  own to not work.
5550: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
5560: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64  _OpenBSD__) || d
5570: 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f  efined(__QNXNTO_
5580: 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  _).# undef SQLIT
5590: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
55a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
55b0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
55c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
55d0: 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69  fault maximum si
55e0: 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65  ze of memory use
55f0: 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70  d by memory-mapp
5600: 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46  ed I/O in the VF
5610: 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50  S.*/.#ifdef __AP
5620: 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20  PLE__.# include 
5630: 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e  <TargetCondition
5640: 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47  als.h>.# if TARG
5650: 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20  ET_OS_IPHONE.#  
5660: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5670: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20  X_MMAP_SIZE.#   
5680: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5690: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
56a0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
56b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
56c0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
56d0: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
56e0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
56f0: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
5700: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
5710: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
5720: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
5730: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a   defined(__sun).
5740: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5750: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5760: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
5770: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
5780: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
5790: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
57a0: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20  IZE 0.# endif.# 
57b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
57c0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  X_MMAP_SIZE_xc 1
57d0: 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d   /* exclude from
57e0: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
57f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
5800: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
5810: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
5820: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
5830: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
5840: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
5850: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
5860: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5870: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
5880: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
5890: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
58a0: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
58b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
58c0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
58d0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
58e0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
58f0: 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20  SIZE 0.# define 
5900: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5910: 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f  MAP_SIZE_xc 1  /
5920: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
5930: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
5940: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5950: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
5960: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5970: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
5980: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5990: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
59a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
59b0: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
59c0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
59d0: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e  f../*.** Only on
59e0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
59f0: 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49  LE_STAT3 or SQLI
5a00: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20  TE_ENABLE_STAT4 
5a10: 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a  can be defined..
5a20: 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67  ** Priority is g
5a30: 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45  iven to SQLITE_E
5a40: 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66  NABLE_STAT4.  If
5a50: 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69   either are defi
5a60: 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66  ned, also.** def
5a70: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
5a80: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5a90: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
5aa0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23  E_ENABLE_STAT4.#
5ab0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
5ac0: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
5ad0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
5ae0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5af0: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
5b00: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
5b10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
5b20: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5b30: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
5b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5b50: 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  R_STAT4.# undef 
5b60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5b70: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e  AT3_OR_STAT4.#en
5b80: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5b90: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5ba0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5bb0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5bc0: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5bd0: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5be0: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5bf0: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5c00: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5c10: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5c20: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5c30: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5c40: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5c50: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5c60: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5c70: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5c80: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5c90: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5ca0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5cb0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5cc0: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5cd0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5ce0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5cf0: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5d00: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5d10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5d20: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5d30: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5d40: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5d50: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5d60: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5d70: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5d80: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5da0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5db0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5dc0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5de0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5df0: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5e00: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5e10: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5e20: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5e30: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5e40: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5e50: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5e60: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
5e70: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
5e80: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
5e90: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
5ea0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
5eb0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
5ec0: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
5ed0: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
5ee0: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
5ef0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
5f00: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
5f10: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
5f20: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
5f30: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
5f40: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
5f50: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
5f60: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
5f70: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
5f80: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
5f90: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
5fa0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
5fb0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
5fc0: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
5fd0: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
5fe0: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
5ff0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6000: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6010: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6020: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
6030: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
6040: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
6050: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
6060: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
6070: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
6080: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6090: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
60a0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
60b0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
60c0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
60d0: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
60e0: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
60f0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6100: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6110: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6120: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
6130: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
6140: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
6150: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
6160: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
6170: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
6180: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6190: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
61a0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
61b0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
61c0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
61d0: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
61e0: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
61f0: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6200: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6210: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6220: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
6230: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
6240: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
6250: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
6260: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
6270: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
6280: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6290: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
62a0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
62b0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
62c0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
62d0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
62e0: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
62f0: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6300: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6310: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6320: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
6330: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
6340: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
6350: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
6360: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
6370: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
6380: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6390: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
63a0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
63b0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
63c0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
63d0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
63e0: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
63f0: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6400: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6410: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6420: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
6430: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
6440: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
6450: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
6460: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
6470: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
6480: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
6490: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
64a0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
64b0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
64c0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
64d0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
64e0: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
64f0: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6500: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6510: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6520: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
6530: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
6540: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
6550: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
6560: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
6570: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
6580: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
6590: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
65a0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
65b0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
65c0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
65d0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
65e0: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
65f0: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6600: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6610: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6620: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
6630: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
6640: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
6650: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
6660: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
6670: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
6680: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
6690: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
66a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
66b0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
66c0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
66d0: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
66e0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
66f0: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6700: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6710: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6720: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
6730: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
6740: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
6750: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
6760: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
6770: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
6780: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6790: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
67a0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
67b0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
67c0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
67d0: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
67e0: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
67f0: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6800: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6810: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6820: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
6830: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
6840: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
6850: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
6860: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
6870: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
6880: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
6890: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
68a0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
68b0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
68c0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
68d0: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
68e0: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
68f0: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6900: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6910: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6920: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6930: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6940: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6950: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
6960: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
6970: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
6980: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
6990: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
69a0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
69b0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
69c0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
69d0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
69e0: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
69f0: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6a00: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6a10: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6a20: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6a30: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6a40: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6a50: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6a60: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6a70: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6a80: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6a90: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6aa0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6ab0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6ac0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6ad0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6ae0: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6af0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6b00: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6b10: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6b20: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6b30: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6b40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6b50: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6b60: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6b70: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6b80: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6b90: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6ba0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6bb0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6bc0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6bd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6be0: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6bf0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c00: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6c10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6c20: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6c30: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6c40: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6c50: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6c60: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6c70: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6c80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6c90: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6ca0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cb0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6cc0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6cd0: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6ce0: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6cf0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6d00: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6d10: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6d20: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d40: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6d50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6d60: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6d70: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6d80: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6d90: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6da0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6db0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6dc0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6dd0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6de0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6df0: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6e00: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6e10: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6e20: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6e30: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6e40: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6e50: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6e60: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
6e70: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
6e80: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
6e90: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
6ea0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
6eb0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
6ec0: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
6ed0: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
6ee0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
6ef0: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
6f00: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
6f10: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
6f20: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
6f30: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
6f40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f50: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
6f60: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
6f70: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
6f80: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
6f90: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
6fa0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
6fb0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
6fc0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
6fd0: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
6fe0: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
6ff0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7000: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7010: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
7020: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
7030: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
7040: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
7050: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
7060: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
7070: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
7080: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
7090: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
70a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70b0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
70c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
70d0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
70e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
70f0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
7100: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
7110: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
7120: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7130: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
7140: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
7150: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
7160: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
7170: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
7180: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
7190: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
71a0: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
71b0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
71c0: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
71d0: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
71e0: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
71f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
7200: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
7210: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
7220: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
7230: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
7240: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
7250: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
7260: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
7270: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
7280: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
7290: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
72a0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
72b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
72c0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
72d0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
72e0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
72f0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
7300: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7310: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7320: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7330: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
7340: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
7350: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
7360: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
7370: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
7380: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7390: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
73a0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
73b0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
73c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
73d0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
73e0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
73f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
7400: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7410: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7420: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
7430: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
7440: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
7450: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
7460: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
7470: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
7480: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7490: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
74a0: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
74b0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
74c0: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
74d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
74e0: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
74f0: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
7500: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7510: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7520: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
7530: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
7540: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
7550: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
7560: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
7570: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
7580: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7590: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
75a0: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
75b0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
75c0: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
75d0: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
75e0: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
75f0: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
7600: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7610: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7620: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
7630: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
7640: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
7650: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
7660: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
7670: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
7680: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7690: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
76a0: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
76b0: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
76c0: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
76d0: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
76e0: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
76f0: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
7700: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7710: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7720: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
7730: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
7740: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
7750: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
7760: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7770: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
7780: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7790: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
77a0: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
77b0: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
77c0: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
77d0: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
77e0: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
77f0: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
7800: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7810: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7820: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
7830: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
7840: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
7850: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
7860: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
7870: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7880: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7890: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
78a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
78b0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
78c0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
78d0: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
78e0: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
78f0: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
7900: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7910: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7920: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7930: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7940: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7950: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7960: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7970: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7980: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7990: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
79a0: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
79b0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
79c0: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
79d0: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
79e0: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
79f0: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
7a00: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7a10: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7a20: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7a30: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7a40: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7a50: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7a60: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
7a70: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7a80: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7a90: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7aa0: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7ab0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7ac0: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7ad0: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
7ae0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
7af0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7b00: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7b10: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7b20: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7b30: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7b40: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7b50: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7b60: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7b70: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7b80: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
7b90: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
7ba0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7bb0: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7bc0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7bd0: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7be0: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7bf0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7c00: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7c10: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
7c20: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
7c30: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
7c40: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
7c50: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7c60: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
7c70: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
7c80: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
7c90: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7ca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
7cb0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
7cc0: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
7cd0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7ce0: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
7cf0: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
7d00: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
7d10: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
7d20: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
7d30: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
7d40: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
7d50: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
7d60: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
7d70: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
7d80: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
7d90: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
7da0: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
7db0: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
7dc0: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
7dd0: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
7de0: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
7df0: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
7e00: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7e10: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
7e20: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
7e30: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
7e40: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
7e50: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
7e60: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
7e70: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
7e80: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
7e90: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
7ea0: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
7eb0: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ) */../*.** The 
7ec0: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
7ed0: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
7ee0: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
7ef0: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
7f00: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
7f10: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
7f20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
7f30: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
7f40: 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
7f50: 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  DEPTH+1)../*.** 
7f60: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
7f70: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
7f80: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
7f90: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
7fa0: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
7fb0: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
7fc0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
7fd0: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
7fe0: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
7ff0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
8000: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
8010: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
8020: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
8030: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
8040: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
8050: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
8060: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
8070: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
8080: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
8090: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
80a0: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
80b0: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
80c0: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
80d0: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
80e0: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
80f0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
8100: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
8110: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
8120: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
8130: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
8140: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
8150: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
8160: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
8170: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
8180: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
8190: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
81a0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
81b0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
81c0: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
81d0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
81e0: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
81f0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
8200: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
8210: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
8220: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
8230: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
8240: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
8250: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
8260: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
8270: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
8280: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
8290: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
82a0: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
82b0: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
82c0: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
82d0: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
82e0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
82f0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
8300: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
8310: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
8320: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
8330: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
8340: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
8350: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
8360: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
8370: 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b  side {.  u16 sz;
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
83a0: 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73   buffer in bytes
83b0: 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65   */.  u8 bEnable
83c0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
83d0: 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   False to disabl
83e0: 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20  e new lookaside 
83f0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20  allocations */. 
8400: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
8410: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
8420: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
8430: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
8440: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69  _malloc() */.  i
8450: 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20  nt nOut;        
8460: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8470: 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72   of buffers curr
8480: 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
8490: 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74  t */.  int mxOut
84a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
84b0: 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b  * Highwater mark
84c0: 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69   for nOut */.  i
84d0: 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  nt anStat[3];   
84e0: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
84f0: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
8500: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
8510: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
8520: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
8530: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
8540: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
8550: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
8560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
8570: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
8580: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
8590: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
85a0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
85b0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
85c0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
85d0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
85e0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
85f0: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
8600: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
8610: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
8620: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
8630: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
8640: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
8650: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
8660: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ion definitions.
8670: 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68  .**.** Hash each
8680: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
8690: 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74  re into one of t
86a0: 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61  he FuncDefHash.a
86b0: 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c  [] slots..** Col
86c0: 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74  lisions are on t
86d0: 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68  he FuncDef.pHash
86e0: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63   chain..*/.struc
86f0: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a  t FuncDefHash {.
8700: 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d    FuncDef *a[23]
8710: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
8720: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
8730: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
8740: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
8750: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
8760: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
8770: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
8780: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
8790: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
87a0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
87b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
87c0: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
87d0: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
87e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
87f0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
8800: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
8810: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
8820: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
8830: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
8840: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
8850: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
8860: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
8870: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
8880: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
8890: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
88a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
88b0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
88c0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
88d0: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
88e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
88f0: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
8900: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
8910: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
8920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8930: 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e      /* Miscellan
8940: 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20  eous flags. See 
8950: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
8960: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
8970: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
8980: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
8990: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
89a0: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
89b0: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
89c0: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
89d0: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
89e0: 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ing */.  unsigne
89f0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
8a00: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
8a10: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
8a20: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
8a30: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a50: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
8a60: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
8a70: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
8a80: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
8a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
8aa0: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
8ab0: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
8ac0: 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64  rning */.  u16 d
8ad0: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
8ae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
8af0: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
8b00: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
8b10: 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  s */.  u8 autoCo
8b20: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
8b30: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
8b40: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
8b50: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
8b60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8b70: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
8b80: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
8b90: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
8ba0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
8bb0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
8bc0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
8bd0: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
8be0: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
8bf0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8c00: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
8c10: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
8c20: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
8c30: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
8c40: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
8c50: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
8c60: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
8c70: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
8c80: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
8c90: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
8ca0: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
8cb0: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
8cc0: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
8cd0: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
8ce0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
8cf0: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
8d00: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
8d10: 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69    u8 isTransacti
8d20: 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  onSavepoint;    
8d30: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f  /* True if the o
8d40: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
8d50: 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20  nt is a TS */.  
8d60: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
8d70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8d80: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
8d90: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
8da0: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
8dd0: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
8de0: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
8df0: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8e10: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
8e20: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
8e30: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
8e40: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
8e50: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
8e60: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
8e70: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
8e80: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
8e90: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
8ea0: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
8eb0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
8ec0: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
8ed0: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
8ee0: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
8ef0: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
8f00: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
8f10: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
8f20: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
8f30: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
8f40: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
8f50: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
8f80: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
8f90: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
8fa0: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
8fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
8fc0: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
8fd0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
8fe0: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
9010: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
9020: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
9030: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
9040: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
9050: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
9060: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
9070: 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a  er */.  } init;.
9080: 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76    int nVdbeActiv
9090: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
90a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42  /* Number of VDB
90b0: 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  Es currently run
90c0: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ning */.  int nV
90d0: 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20  dbeRead;        
90e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
90f0: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
9100: 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77  s that read or w
9110: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
9120: 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20  dbeWrite;       
9130: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9140: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
9150: 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20  s that read and 
9160: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
9170: 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20  VdbeExec;       
9180: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9190: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
91a0: 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29  ls to VdbeExec()
91b0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
91c0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
91d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
91e0: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
91f0: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
9200: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
9210: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
9220: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
9230: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f   handles */.  vo
9240: 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69  id (*xTrace)(voi
9250: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  d*,const char*);
9260: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65          /* Trace
9270: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
9280: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
92b0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
92c0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
92d0: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
92e0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
92f0: 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f  r*,u64);  /* Pro
9300: 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  filing function 
9310: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66  */.  void *pProf
9320: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
9330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9340: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72  * Argument to pr
9350: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a  ofile function *
9360: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69  /.  void *pCommi
9370: 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  tArg;           
9380: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
9390: 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c  t to xCommitCall
93a0: 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69  back() */   .  i
93b0: 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c  nt (*xCommitCall
93c0: 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20  back)(void*);   
93d0: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
93e0: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
93f0: 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63    void *pRollbac
9400: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
9410: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9420: 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  to xRollbackCall
9430: 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76  back() */   .  v
9440: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
9450: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
9460: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
9470: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
9480: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
9490: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
94a0: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
94b0: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
94c0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
94d0: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
94e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
94f0: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
9500: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
9510: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
9520: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
9530: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
9540: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
9550: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
9560: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
9570: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
9580: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
9590: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
95a0: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
95b0: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
95c0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
95d0: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
95e0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
95f0: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
9600: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
9610: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
9620: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
9630: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
9640: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
9650: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
9660: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
9670: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
9680: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
9690: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
96a0: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
96b0: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
96c0: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
96d0: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
96e0: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
96f0: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
9700: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
9710: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74  HORIZATION.  int
9720: 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c   (*xAuth)(void*,
9730: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9740: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9750: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
9760: 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ar*);.          
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20        /* Access 
9790: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75  authorization fu
97a0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
97b0: 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20   *pAuthArg;     
97c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
97d0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
97e0: 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e   access auth fun
97f0: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
9800: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
9810: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
9820: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50  LBACK.  int (*xP
9830: 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29  rogress)(void *)
9840: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f  ;     /* The pro
9850: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
9860: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72  /.  void *pProgr
9870: 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  essArg;         
9880: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
9890: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
98a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69  llback */.  unsi
98b0: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70  gned nProgressOp
98c0: 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  s;        /* Num
98d0: 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66  ber of opcodes f
98e0: 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  or progress call
98f0: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  back */.#endif.#
9900: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9910: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
9920: 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20    int nVTrans;  
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
9950: 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a  e of aVTrans */.
9960: 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20    Hash aModule; 
9970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9980: 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20  /* populated by 
9990: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
99a0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61  odule() */.  Vta
99b0: 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20  bCtx *pVtabCtx; 
99c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
99d0: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
99e0: 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72   vtab connect/cr
99f0: 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  eate */.  VTable
9a00: 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20   **aVTrans;     
9a10: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75          /* Virtu
9a20: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  al tables with o
9a30: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  pen transactions
9a40: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44   */.  VTable *pD
9a50: 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a  isconnect;    /*
9a60: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
9a70: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
9a80: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
9a90: 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48  endif.  FuncDefH
9aa0: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
9ab0: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
9ac0: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
9ad0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
9ae0: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9b00: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
9b10: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
9b20: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
9b30: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
9b40: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
9b50: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
9b60: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
9b70: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
9b80: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
9b90: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
9ba0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
9bb0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
9bc0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
9bd0: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
9be0: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
9bf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9c00: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
9c10: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
9c20: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
9c30: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
9c40: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9c50: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
9c60: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
9c70: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9c90: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
9ca0: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
9cb0: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
9cc0: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
9cd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9ce0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
9cf0: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
9d00: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
9d10: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
9d20: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
9d30: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
9d40: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
9d50: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
9d60: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
9d70: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
9d80: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
9d90: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
9da0: 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c  ) */..#ifdef SQL
9db0: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
9dc0: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
9dd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
9de0: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
9df0: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
9e00: 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20  TATIC_MASTER .  
9e10: 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79  ** mutex, not by
9e20: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20   sqlite3.mutex. 
9e30: 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79  They are used by
9e40: 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e   code in notify.
9e50: 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  c. .  **.  ** Wh
9e60: 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  en X.pUnlockConn
9e70: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
9e80: 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20  means that X is 
9e90: 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f  waiting for Y to
9ea0: 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20  .  ** unlock so 
9eb0: 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63  that it can proc
9ec0: 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  eed..  **.  ** W
9ed0: 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43  hen X.pBlockingC
9ee0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
9ef0: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f  at means that so
9f00: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74  mething that X t
9f10: 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20  ried.  ** tried 
9f20: 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66  to do recently f
9f30: 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51  ailed with an SQ
9f40: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f  LITE_LOCKED erro
9f50: 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20  r due to locks. 
9f60: 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20   ** held by Y.. 
9f70: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9f80: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
9f90: 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f  on; /* Connectio
9fa0: 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51  n that caused SQ
9fb0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20  LITE_LOCKED */. 
9fc0: 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63   sqlite3 *pUnloc
9fd0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20  kConnection;    
9fe0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
9ff0: 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f  tion to watch fo
a000: 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f  r unlock */.  vo
a010: 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20  id *pUnlockArg; 
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a030: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a040: 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79  to xUnlockNotify
a050: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e   */.  void (*xUn
a060: 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64  lockNotify)(void
a070: 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55   **, int);  /* U
a080: 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c  nlock notify cal
a090: 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74  lback */.  sqlit
a0a0: 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64  e3 *pNextBlocked
a0b0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
a0c0: 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20   in list of all 
a0d0: 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69  blocked connecti
a0e0: 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ons */.#endif.};
a0f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
a100: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
a110: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
a120: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
a130: 6e 65 20 45 4e 43 28 64 62 29 20 28 28 64 62 29  ne ENC(db) ((db)
a140: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
a150: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
a160: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
a170: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
a180: 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags..*/.#define 
a190: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
a1a0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31        0x00000001
a1b0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61    /* True to tra
a1c0: 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f  ce VDBE executio
a1d0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
a1e0: 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
a1f0: 73 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f  s  0x00000002  /
a200: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
a210: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
a220: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a230: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
a240: 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a    0x00000004  /*
a250: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
a260: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
a270: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a280: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
a290: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
a2a0: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
a2b0: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
a2c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
a2d0: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78  acheSpill     0x
a2e0: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20  00000010  /* OK 
a2f0: 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63  to spill pager c
a300: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
a310: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
a320: 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30  mes   0x00000020
a330: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
a340: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
a350: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
a360: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
a370: 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34  Names  0x0000004
a380: 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74  0  /* Show short
a390: 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a   columns names *
a3a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a3b0: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20  _CountRows      
a3c0: 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43  0x00000080  /* C
a3d0: 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65  ount rows change
a3e0: 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a  d by INSERT, */.
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44            /*   D
a420: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
a430: 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20   and return */. 
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a460: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68           /*   th
a470: 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20  e count using a 
a480: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65  callback. */.#de
a490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  fine SQLITE_Null
a4a0: 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30  Callback   0x000
a4b0: 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65  00100  /* Invoke
a4c0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
a4d0: 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20  ce if the */.   
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a500: 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75         /*   resu
a510: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20  lt set is empty 
a520: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a530: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
a540: 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20   0x00000200  /* 
a550: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
a560: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
a570: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a580: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
a590: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44  0x00000400  /* D
a5a0: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
a5b0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a   VDBE programs *
a5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a5d0: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
a5e0: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f  0x00000800  /* O
a5f0: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
a600: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
a610: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
a620: 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30  AddopTrace 0x000
a630: 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20  01000  /* Trace 
a640: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a650: 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66  () calls */.#def
a660: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
a670: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30  eChecks   0x0000
a680: 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  2000  /* Do not 
a690: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
a6a0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
a6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
a6c0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30  Uncommitted 0x00
a6d0: 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68  04000  /* For sh
a6e0: 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
a6f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a700: 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20  E_LegacyFileFmt 
a710: 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20   0x00008000  /* 
a720: 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62  Create new datab
a730: 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31  ases in format 1
a740: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a750: 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20  TE_RecoveryMode 
a760: 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a    0x00010000  /*
a770: 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65   Ignore schema e
a780: 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
a790: 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f   SQLITE_ReverseO
a7a0: 72 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30  rder   0x0002000
a7b0: 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e  0  /* Reverse un
a7c0: 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20  ordered SELECTs 
a7d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a7e0: 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20  E_RecTriggers   
a7f0: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
a800: 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65  Enable recursive
a810: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
a820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65  fine SQLITE_Fore
a830: 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30  ignKeys    0x000
a840: 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63  80000  /* Enforc
a850: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
a860: 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64  nstraints  */.#d
a870: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74  efine SQLITE_Aut
a880: 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30  oIndex      0x00
a890: 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  100000  /* Enabl
a8a0: 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65  e automatic inde
a8b0: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
a8c0: 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c  QLITE_PreferBuil
a8d0: 74 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20  tin  0x00200000 
a8e0: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
a8f0: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
a900: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a910: 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  TE_LoadExtension
a920: 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a    0x00400000  /*
a930: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
a940: 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  ension */.#defin
a950: 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54  e SQLITE_EnableT
a960: 72 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30  rigger  0x008000
a970: 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65  00  /* True to e
a980: 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a  nable triggers *
a990: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a9a0: 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20  _DeferFKs       
a9b0: 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44  0x01000000  /* D
a9c0: 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73  efer all FK cons
a9d0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
a9e0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f  ne SQLITE_QueryO
a9f0: 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30  nly      0x02000
aa00: 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20  000  /* Disable 
aa10: 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73  database changes
aa20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aa30: 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20  TE_VdbeEQP      
aa40: 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a    0x04000000  /*
aa50: 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51   Debug EXPLAIN Q
aa60: 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f  UERY PLAN */.../
aa70: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
aa80: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
aa90: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
aaa0: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
aab0: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
aac0: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
aad0: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
aae0: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
aaf0: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
ab00: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
ab10: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
ab20: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
ab30: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
ab40: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
ab50: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
ab60: 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ng */.#define SQ
ab70: 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65  LITE_ColumnCache
ab80: 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20      0x0002   /* 
ab90: 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a  Column cache */.
aba0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47  #define SQLITE_G
abb0: 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78  roupByOrder   0x
abc0: 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42  0004   /* GROUPB
abd0: 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52  Y cover of ORDER
abe0: 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BY */.#define SQ
abf0: 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f  LITE_FactorOutCo
ac00: 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20  nst 0x0008   /* 
ac10: 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69  Constant factori
ac20: 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20  ng */./*        
ac30: 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64          not used
ac40: 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20      0x0010   // 
ac50: 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52  Was: SQLITE_IdxR
ac60: 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66  ealAsInt */.#def
ac70: 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69  ine SQLITE_Disti
ac80: 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30  nctOpt    0x0020
ac90: 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75     /* DISTINCT u
aca0: 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a  sing indexes */.
acb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
acc0: 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78  overIdxScan   0x
acd0: 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69  0040   /* Coveri
ace0: 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a  ng index scans *
acf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ad00: 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20  _OrderByIdxJoin 
ad10: 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45  0x0080   /* ORDE
ad20: 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69  R BY of joins vi
ad30: 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  a index */.#defi
ad40: 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f  ne SQLITE_SubqCo
ad50: 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20  routine  0x0100 
ad60: 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75    /* Evaluate su
ad70: 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f  bqueries as coro
ad80: 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e  utines */.#defin
ad90: 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74  e SQLITE_Transit
ada0: 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20  ive     0x0200  
adb0: 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63   /* Transitive c
adc0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
add0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69  efine SQLITE_Omi
ade0: 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34  tNoopJoin   0x04
adf0: 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75  00   /* Omit unu
ae00: 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f  sed tables in jo
ae10: 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ins */.#define S
ae20: 51 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20 20  QLITE_Stat3     
ae30: 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a       0x0800   /*
ae40: 20 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f   Use the SQLITE_
ae50: 53 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23  STAT3 table */.#
ae60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 64  define SQLITE_Ad
ae70: 6a 75 73 74 4f 75 74 45 73 74 20 20 20 30 78 31  justOutEst   0x1
ae80: 30 30 30 20 20 20 2f 2a 20 41 64 6a 75 73 74 20  000   /* Adjust 
ae90: 6f 75 74 70 75 74 20 65 73 74 69 6d 61 74 65 73  output estimates
aea0: 20 75 73 69 6e 67 20 57 48 45 52 45 20 2a 2f 0a   using WHERE */.
aeb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
aec0: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
aed0: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
aee0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
aef0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
af00: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
af10: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
af20: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
af30: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
af40: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
af50: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
af60: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
af70: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
af80: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
af90: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
afa0: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
afb0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
afc0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
afd0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
afe0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
aff0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
b000: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
b010: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
b020: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b030: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
b040: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
b050: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
b060: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
b070: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
b080: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
b090: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
b0a0: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
b0b0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
b0c0: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
b0d0: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
b0e0: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
b0f0: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
b100: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
b110: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
b120: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
b130: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
b140: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
b150: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
b160: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
b170: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
b180: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
b190: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
b1a0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
b1b0: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
b1c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b1d0: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
b1e0: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
b1f0: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
b200: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
b210: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
b220: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
b230: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
b240: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b250: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
b260: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
b270: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
b280: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
b290: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b2a0: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
b2b0: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
b2c0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
b2d0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b2e0: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
b2f0: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
b300: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
b310: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
b320: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
b330: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
b340: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
b350: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
b360: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
b370: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
b380: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
b390: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
b3a0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
b3b0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
b3c0: 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65  cture.  A pointe
b3d0: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
b3e0: 75 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ure is stored in
b3f0: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e   the sqlite.aFun
b400: 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  c.** hash table.
b410: 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20    When multiple 
b420: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74  functions have t
b430: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68  he same name, th
b440: 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20  e hash table.** 
b450: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b  points to a link
b460: 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65  ed list of these
b470: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a   structures..*/.
b480: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
b490: 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20  .  i16 nArg;    
b4a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
b4b0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
b4c0: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
b4d0: 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e  ted */.  u16 fun
b4e0: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
b4f0: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
b500: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
b510: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
b520: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
b530: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
b540: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
b550: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
b560: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
b570: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
b580: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
b590: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
b5a0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
b5b0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c  lue**); /* Regul
b5c0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ar function */. 
b5d0: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
b5e0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b5f0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b600: 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61  e**); /* Aggrega
b610: 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  te step */.  voi
b620: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
b630: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
b640: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b650: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69   /* Aggregate fi
b660: 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61  nalizer */.  cha
b670: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b680: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
b690: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
b6a0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61  /.  FuncDef *pHa
b6b0: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
b6c0: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
b6d0: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
b6e0: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75  ame hash */.  Fu
b6f0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
b700: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
b710: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
b720: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
b730: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
b740: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
b750: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
b760: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
b770: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
b780: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
b790: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
b7a0: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
b7b0: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
b7c0: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
b7d0: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
b7e0: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
b7f0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
b800: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
b810: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
b820: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
b830: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
b840: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
b850: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
b860: 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d  t to .** the num
b870: 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f  ber of FuncDef o
b880: 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28  bjects created (
b890: 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64  either 1 or 3, d
b8a0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
b8b0: 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68  her.** or not th
b8c0: 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f  e specified enco
b8d0: 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41  ding is SQLITE_A
b8e0: 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66  NY). The FuncDef
b8f0: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
b900: 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f  member of each o
b910: 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65  f the new FuncDe
b920: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74  f objects is set
b930: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
b940: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75   allocated.** Fu
b950: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a  ncDestructor..**
b960: 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20  .** Thereafter, 
b970: 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  when one of the 
b980: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
b990: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
b9a0: 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75  reference.** cou
b9b0: 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63  nt on this objec
b9c0: 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64  t is decremented
b9d0: 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65  . When it reache
b9e0: 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63  s 0, the destruc
b9f0: 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  tor.** is invoke
ba00: 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65  d and the FuncDe
ba10: 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75  structor structu
ba20: 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72  re freed..*/.str
ba30: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
ba40: 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b  or {.  int nRef;
ba50: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
ba60: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76  oy)(void *);.  v
ba70: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a  oid *pUserData;.
ba80: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
ba90: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
baa0: 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f  ncDef.flags.  No
bab0: 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e  te that the _LEN
bac0: 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a  GTH and _TYPEOF.
bad0: 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63  ** values must c
bae0: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46  orrespond to OPF
baf0: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
bb00: 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
bb10: 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  RG.  There.** ar
bb20: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
bb30: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
bb40: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
bb50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
bb60: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
bb70: 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54    0x003 /* SQLIT
bb80: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
bb90: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
bba0: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
bbb0: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
bbc0: 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69    0x004 /* Candi
bbd0: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
bbe0: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
bbf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bc00: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
bc10: 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  x008 /* Case-sen
bc20: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
bc30: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
bc40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
bc50: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31 30 20  _EPHEM    0x010 
bc60: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
bc70: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
bc80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc90: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
bca0: 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33  0x020 /* sqlite3
bcb0: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
bcc0: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
bcd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bce0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
bcf0: 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d   0x040 /* Built-
bd00: 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63  in length() func
bd10: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
bd20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
bd30: 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75  OF   0x080 /* Bu
bd40: 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20  ilt-in typeof() 
bd50: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
bd60: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
bd70: 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f  COUNT    0x100 /
bd80: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
bd90: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
bda0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bdb0: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
bdc0: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
bdd0: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
bde0: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
bdf0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
be00: 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20  LIKELY 0x400 /* 
be10: 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c  Built-in unlikel
be20: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
be30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
be40: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38  UNC_CONSTANT 0x8
be50: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
be60: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
be70: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
be80: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
be90: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
bea0: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
beb0: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
bec0: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
bed0: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
bee0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
bef0: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
bf00: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
bf10: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
bf20: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
bf30: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
bf40: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
bf50: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
bf60: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
bf70: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
bf80: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
bf90: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
bfa0: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
bfb0: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
bfc0: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
bfd0: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
bfe0: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
bff0: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
c000: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
c010: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
c020: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
c030: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
c040: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
c050: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
c060: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
c070: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
c080: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
c090: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
c0a0: 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
c0b0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
c0c0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
c0d0: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
c0e0: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
c0f0: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
c100: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
c110: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
c120: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
c130: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
c140: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
c150: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
c160: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
c170: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c180: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
c190: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
c1a0: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
c1b0: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
c1c0: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
c1d0: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
c1e0: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
c1f0: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
c200: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
c210: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
c220: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
c230: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
c240: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
c250: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
c260: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
c270: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
c280: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
c290: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
c2a0: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
c2b0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
c2c0: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
c2d0: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
c2e0: 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74   C .**     funct
c2f0: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
c300: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
c310: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
c320: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
c330: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
c340: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
c350: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
c360: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
c370: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
c380: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
c390: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
c3a0: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
c3b0: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
c3c0: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
c3d0: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
c3e0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c3f0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
c400: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
c410: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
c420: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
c430: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
c440: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
c450: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
c460: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
c470: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
c480: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
c490: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c4a0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
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 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
c4d0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
c4e0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
c4f0: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
c500: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
c510: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
c520: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
c530: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
c540: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
c550: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
c560: 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
c570: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
c580: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
c590: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
c5a0: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
c5b0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
c5c0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
c5d0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
c5e0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
c5f0: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
c600: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
c610: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
c620: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
c630: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
c640: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
c650: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
c660: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
c670: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
c680: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
c690: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
c6a0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
c6b0: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
c6c0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
c6d0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
c6e0: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
c6f0: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
c700: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
c710: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
c720: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
c730: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
c740: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
c750: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
c760: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
c770: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
c780: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
c790: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
c7a0: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
c7b0: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
c7c0: 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  ,0}../*.** All c
c7d0: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
c7e0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
c7f0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
c800: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
c810: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
c820: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
c830: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
c840: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
c850: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
c860: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
c870: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
c880: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
c890: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
c8a0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
c8b0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
c8c0: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
c8d0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8f0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
c900: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
c910: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
c920: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
c930: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c940: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
c950: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
c960: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
c970: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
c980: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c990: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
c9a0: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
c9b0: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c9d0: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
c9e0: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
c9f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
ca00: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
ca10: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
ca20: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
ca30: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
ca40: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
ca50: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
ca60: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
ca70: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
ca80: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
ca90: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
caa0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
cab0: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
cac0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
cad0: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
cae0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
caf0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
cb00: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
cb10: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
cb20: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
cb30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
cb40: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
cb50: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
cb60: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
cb70: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
cb80: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
cb90: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
cba0: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
cbb0: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
cbc0: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
cbd0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cbf0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
cc00: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
cc10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
cc20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cc30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
cc40: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
cc50: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
cc60: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
cc70: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
cc80: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
cc90: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
cca0: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
ccb0: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
ccc0: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
ccd0: 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
cce0: 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
ccf0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
cd00: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
cd10: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
cd20: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
cd30: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
cd40: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  is column */.  E
cd50: 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
cd60: 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
cd70: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
cd80: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74  */.  char *zDflt
cd90: 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61  ;     /* Origina
cda0: 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65  l text of the de
cdb0: 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
cdc0: 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20   char *zType;   
cdd0: 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66    /* Data type f
cde0: 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  or this column *
cdf0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
ce00: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
ce10: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
ce20: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
ce30: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
ce40: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
ce50: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
ce60: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
ce70: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
ce80: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
ce90: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
cea0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
ceb0: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
cec0: 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
ced0: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
cee0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
cef0: 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20   INT==1 */.  u8 
cf00: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
cf10: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
cf20: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
cf30: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
cf40: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
cf50: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
cf60: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
cf70: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
cf80: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
cf90: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
cfa0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
cfb0: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
cfc0: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
cfd0: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
cfe0: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
cff0: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
d000: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
d010: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
d020: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
d030: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
d040: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d050: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
d060: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
d070: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d080: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
d090: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
d0a0: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
d0b0: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
d0c0: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
d0d0: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
d0e0: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
d0f0: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
d100: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
d110: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d120: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
d130: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
d140: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
d150: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
d160: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
d170: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
d180: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
d190: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
d1a0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
d1b0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
d1c0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
d1d0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
d1e0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
d1f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
d200: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
d210: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
d220: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
d230: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
d240: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
d250: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
d260: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
d270: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
d280: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
d290: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
d2a0: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
d2b0: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
d2c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
d2d0: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
d2e0: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
d2f0: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
d300: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
d310: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
d320: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
d330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d340: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
d350: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
d360: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
d370: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
d380: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
d390: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
d3a0: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
d3b0: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
d3c0: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
d3d0: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
d3e0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
d3f0: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
d400: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
d410: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
d420: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
d430: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
d440: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
d450: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
d460: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
d470: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
d480: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
d490: 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68  in with 'a'.  Th
d4a0: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
d4b0: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
d4c0: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
d4d0: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
d4e0: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
d4f0: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
d500: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
d510: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
d520: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
d530: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
d540: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
d550: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
d560: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
d570: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
d580: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
d590: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23  comparison..*/.#
d5a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
d5b0: 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23  F_TEXT     'a'.#
d5c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
d5d0: 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23  F_NONE     'b'.#
d5e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
d5f0: 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23  F_NUMERIC  'c'.#
d600: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
d610: 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23  F_INTEGER  'd'.#
d620: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
d630: 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a  F_REAL     'e'..
d640: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
d650: 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
d660: 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
d670: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
d680: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
d690: 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
d6a0: 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
d6b0: 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
d6c0: 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
d6d0: 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65  y value. .*/.#de
d6e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
d6f0: 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f  MASK     0x67../
d700: 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
d710: 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
d720: 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
d730: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
d740: 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
d750: 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
d760: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
d770: 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20  NOTNULL flag is 
d780: 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
d790: 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50   NULLEQ and JUMP
d7a0: 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61  IFNULL..** It ca
d7b0: 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29  uses an assert()
d7c0: 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68   to fire if eith
d7d0: 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  er operand to a 
d7e0: 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70  comparison.** op
d7f0: 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20  erator is NULL. 
d800: 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   It is added to 
d810: 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73  certain comparis
d820: 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a  on operators to.
d830: 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68  ** prove that th
d840: 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61  e operands are a
d850: 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  lways NOT NULL..
d860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d870: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
d880: 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x08  /* jumps if
d890: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d8a0: 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
d8b0: 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
d8c0: 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20  2      0x10  /* 
d8d0: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
d8e0: 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
d8f0: 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
d900: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
d910: 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
d920: 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64   NULL=NULL */.#d
d930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54  efine SQLITE_NOT
d940: 4e 55 4c 4c 20 20 20 20 20 20 30 78 38 38 20 20  NULL      0x88  
d950: 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f  /* Assert that o
d960: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65  perands are neve
d970: 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r NULL */../*.**
d980: 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68   An object of th
d990: 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74  is type is creat
d9a0: 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74  ed for each virt
d9b0: 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e  ual table presen
d9c0: 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  t in.** the data
d9d0: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a  base schema. .**
d9e0: 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
d9f0: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
da00: 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
da10: 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
da20: 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
da30: 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
da40: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
da50: 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
da60: 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
da70: 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
da80: 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
da90: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
daa0: 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
dab0: 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
dac0: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
dad0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
dae0: 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
daf0: 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
db00: 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c  l table .** impl
db10: 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69  ementation. sqli
db20: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
db30: 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61  s can not be sha
db40: 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20  red between .** 
db50: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
db60: 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20  ions, even when 
db70: 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
db80: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
db90: 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  se .** schema is
dba0: 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
dbb0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
dbc0: 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
dbd0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
dbe0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
dbf0: 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
dc00: 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
dc10: 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
dc20: 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
dc30: 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
dc40: 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
dc50: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
dc60: 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
dc70: 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
dc80: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
dc90: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
dca0: 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
dcb0: 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20  bles .** within 
dcc0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f  the database. So
dcd0: 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61   that they appea
dce0: 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  r as part of the
dcf0: 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61   callers .** tra
dd00: 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20  nsaction, these 
dd10: 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f  accesses need to
dd20: 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65   be made via the
dd30: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a   same database .
dd40: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
dd50: 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
dd60: 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
dd70: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
dd80: 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
dd90: 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
dda0: 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
ddb0: 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
ddc0: 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
ddd0: 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
dde0: 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
ddf0: 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
de00: 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
de10: 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
de20: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
de30: 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
de40: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
de50: 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
de60: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
de70: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
de80: 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
de90: 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
dea0: 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
deb0: 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
dec0: 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
ded0: 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
dee0: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
def0: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
df00: 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
df10: 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
df20: 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
df30: 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
df40: 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
df50: 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
df60: 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
df70: 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
df80: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
df90: 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
dfa0: 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
dfb0: 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
dfc0: 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
dfd0: 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
dfe0: 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
dff0: 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  t .** deleted an
e000: 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
e010: 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
e020: 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
e030: 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  )ed .** immediat
e040: 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
e050: 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
e060: 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
e070: 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
e080: 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
e090: 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
e0a0: 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
e0b0: 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
e0c0: 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
e0d0: 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
e0e0: 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
e0f0: 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
e100: 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e  sconnected .** n
e110: 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
e120: 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
e130: 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
e140: 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
e150: 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
e160: 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
e170: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
e180: 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
e190: 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
e1a0: 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
e1b0: 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
e1c0: 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
e1d0: 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
e1e0: 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
e1f0: 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
e200: 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
e210: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
e220: 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
e230: 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
e240: 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
e250: 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
e260: 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
e270: 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
e280: 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
e290: 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
e2a0: 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71  ocated by .** sq
e2b0: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
e2c0: 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
e2d0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
e2e0: 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
e2f0: 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73   as .** the firs
e300: 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
e310: 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
e320: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
e330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
e340: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e350: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
e360: 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
e370: 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
e380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e390: 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
e3a0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
e3b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
e3c0: 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
e3d0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
e3e0: 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
e3f0: 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
e400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
e410: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
e420: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
e430: 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
e440: 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
e450: 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
e460: 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
e470: 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
e480: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
e490: 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
e4a0: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
e4b0: 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
e4c0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
e4d0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
e4e0: 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
e4f0: 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
e500: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62  .** Each SQL tab
e510: 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
e520: 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
e530: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e540: 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73  e.** following s
e550: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
e560: 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74  Table.zName is t
e570: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
e580: 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20  able.  The case 
e590: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  of the original.
e5a0: 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ** CREATE TABLE 
e5b0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f  statement is sto
e5c0: 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69 73  red, but case is
e5d0: 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74   not significant
e5e0: 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   for.** comparis
e5f0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ons..**.** Table
e600: 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d  .nCol is the num
e610: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
e620: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54  n this table.  T
e630: 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a  able.aCol is a.*
e640: 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  * pointer to an 
e650: 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20  array of Column 
e660: 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20  structures, one 
e670: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
e680: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  .**.** If the ta
e690: 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47  ble has an INTEG
e6a0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
e6b0: 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79  then Table.iPKey
e6c0: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
e6d0: 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74  .** the column t
e6e0: 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e  hat is that key.
e6f0: 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61 62     Otherwise Tab
e700: 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61  le.iPKey is nega
e710: 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74  tive.  Note.** t
e720: 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70 65  hat the datatype
e730: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
e740: 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45  KEY must be INTE
e750: 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69 65  GER for this fie
e760: 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e  ld to.** be set.
e770: 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49    An INTEGER PRI
e780: 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65 64  MARY KEY is used
e790: 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f   as the rowid fo
e7a0: 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a  r each row of.**
e7b0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
e7c0: 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49  a table has no I
e7d0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e7e0: 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f  EY, then a rando
e7f0: 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65  m rowid.** is ge
e800: 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63 68  nerated for each
e810: 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c   row of the tabl
e820: 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72  e.  TF_HasPrimar
e830: 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a  yKey is set if.*
e840: 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  * the table has 
e850: 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  any PRIMARY KEY,
e860: 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65   INTEGER or othe
e870: 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  rwise..**.** Tab
e880: 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70  le.tnum is the p
e890: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  age number for t
e8a0: 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61  he root BTree pa
e8b0: 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
e8c0: 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  in the.** databa
e8d0: 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62  se file.  If Tab
e8e0: 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e  le.iDb is the in
e8f0: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
e900: 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e  ase table backen
e910: 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61  d.** in sqlite.a
e920: 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20  Db[].  0 is for 
e930: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
e940: 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74  e and 1 is for t
e950: 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20  he file that.** 
e960: 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20  holds temporary 
e970: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
e980: 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d  es.  If TF_Ephem
e990: 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74  eral is set.** t
e9a0: 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73  hen the table is
e9b0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c   stored in a fil
e9c0: 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61  e that is automa
e9d0: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a  tically deleted.
e9e0: 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42 45  ** when the VDBE
e9f0: 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74   cursor to the t
ea00: 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20  able is closed. 
ea10: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54 61   In this case Ta
ea20: 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66  ble.tnum .** ref
ea30: 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72 20  ers VDBE cursor 
ea40: 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64  number that hold
ea50: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e  s the table open
ea60: 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f  , not to the roo
ea70: 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72  t.** page number
ea80: 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62  .  Transient tab
ea90: 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  les are used to 
eaa0: 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73  hold the results
eab0: 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65   of a.** sub-que
eac0: 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73 20  ry that appears 
ead0: 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65 61  instead of a rea
eae0: 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  l table name in 
eaf0: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
eb00: 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20  .** of a SELECT 
eb10: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
eb20: 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63  ruct Table {.  c
eb30: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
eb40: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
eb50: 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
eb60: 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43   */.  Column *aC
eb70: 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ol;        /* In
eb80: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
eb90: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
eba0: 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
ebb0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
ebc0: 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20   SQL indexes on 
ebd0: 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  this table. */. 
ebe0: 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
ebf0: 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f  ;     /* NULL fo
ec00: 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74  r tables.  Point
ec10: 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20  s to definition 
ec20: 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20  if a view. */.  
ec30: 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
ec40: 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
ec50: 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69  ist of all forei
ec60: 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20  gn keys in this 
ec70: 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  table */.  char 
ec80: 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
ec90: 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
eca0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
ecb0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
ecc0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
ecd0: 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78  _OMIT_CHECK.  Ex
ece0: 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
ecf0: 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
ed00: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
ed10: 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e  endif.  LogEst n
ed20: 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
ed30: 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
ed40: 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
ed50: 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
ed60: 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  e */.  int tnum;
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
ed80: 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66  oot BTree node f
ed90: 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73  or this table (s
eda0: 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a  ee note above) *
edb0: 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
edc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
edd0: 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
ede0: 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
edf0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
ee00: 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
ee10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ee20: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
ee30: 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
ee40: 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
ee50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ee60: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
ee70: 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
ee80: 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b  LogEst szTabRow;
ee90: 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
eea0: 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74  d size of each t
eeb0: 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65  able row in byte
eec0: 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
eed0: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55  TE_ENABLE_COSTMU
eee0: 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74  LT.  LogEst cost
eef0: 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73  Mult;     /* Cos
ef00: 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72  t multiplier for
ef10: 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c   using this tabl
ef20: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38  e */.#endif.  u8
ef30: 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
ef40: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
ef50: 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
ef60: 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
ef70: 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
ef80: 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
ef90: 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
efa0: 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
efb0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
efc0: 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
efd0: 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
efe0: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
eff0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
f000: 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
f010: 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
f020: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f030: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
f040: 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
f050: 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
f060: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
f070: 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
f080: 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
f090: 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f  eArg;  /* Text o
f0a0: 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67  f all module arg
f0b0: 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65  s. [0] is module
f0c0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c   name */.  VTabl
f0d0: 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
f0e0: 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
f0f0: 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
f100: 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
f110: 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
f120: 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
f130: 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
f140: 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
f150: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
f160: 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
f170: 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
f180: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
f190: 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
f1a0: 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
f1b0: 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
f1c0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
f1d0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
f1e0: 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f  ble.tabFlags..*/
f1f0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
f200: 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31  only        0x01
f210: 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
f220: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
f230: 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
f240: 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32  meral       0x02
f250: 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
f260: 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
f270: 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
f280: 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20  ryKey   0x04    
f290: 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
f2a0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
f2b0: 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
f2c0: 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20  rement   0x08   
f2d0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d   /* Integer prim
f2e0: 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69  ary key is autoi
f2f0: 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66  ncrement */.#def
f300: 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20  ine TF_Virtual  
f310: 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
f320: 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74  * Is a virtual t
f330: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
f340: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20  TF_WithoutRowid 
f350: 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f     0x20    /* No
f360: 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49   rowid used. PRI
f370: 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
f380: 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  key */.../*.** T
f390: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
f3a0: 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
f3b0: 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
f3c0: 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
f3d0: 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
f3e0: 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
f3f0: 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
f400: 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
f410: 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
f420: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
f430: 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
f440: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f450: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
f460: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
f470: 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58  ual(X)      (((X
f480: 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
f490: 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20  _Virtual)!=0).# 
f4a0: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
f4b0: 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
f4c0: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
f4d0: 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
f4e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
f4f0: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
f500: 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
f510: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
f520: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65  0.#endif../* Doe
f530: 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
f540: 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
f550: 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
f560: 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
f570: 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
f580: 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
f590: 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
f5a0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
f5b0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f5c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f5d0: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
f5e0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
f5f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
f600: 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
f610: 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
f620: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
f630: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
f640: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
f650: 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
f660: 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
f670: 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
f680: 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
f690: 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
f6a0: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
f6b0: 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
f6c0: 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
f6d0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
f6e0: 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
f6f0: 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
f700: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
f710: 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
f720: 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
f730: 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
f740: 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
f750: 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
f760: 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
f770: 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
f780: 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
f790: 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
f7a0: 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
f7b0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
f7c0: 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
f7d0: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
f7e0: 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
f7f0: 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
f800: 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
f810: 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
f820: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f830: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
f840: 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
f850: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
f860: 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
f870: 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
f880: 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
f890: 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
f8a0: 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
f8b0: 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
f8c0: 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
f8d0: 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
f8e0: 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
f8f0: 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
f900: 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
f910: 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
f920: 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
f930: 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
f940: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
f950: 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
f960: 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
f970: 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
f980: 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
f990: 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
f9a0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
f9b0: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
f9c0: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
f9d0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
f9e0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
f9f0: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
fa00: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
fa10: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
fa20: 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
fa30: 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
fa40: 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
fa50: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
fa60: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
fa70: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
fa80: 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
fa90: 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
faa0: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
fab0: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
fac0: 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
fad0: 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
fae0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
faf0: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
fb00: 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
fb10: 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
fb20: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
fb30: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
fb40: 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
fb50: 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
fb60: 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
fb70: 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
fb80: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
fb90: 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
fba0: 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
fbb0: 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
fbc0: 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
fbd0: 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
fbe0: 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
fbf0: 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
fc00: 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
fc10: 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
fc20: 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
fc30: 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
fc40: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
fc50: 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
fc60: 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
fc70: 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
fc80: 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
fc90: 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
fca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
fcb0: 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
fcc0: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
fcd0: 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
fce0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
fcf0: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
fd00: 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
fd10: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
fd20: 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
fd30: 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
fd40: 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
fd50: 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
fd60: 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
fd70: 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
fd80: 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
fd90: 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
fda0: 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
fdb0: 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
fdc0: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
fdd0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
fde0: 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
fdf0: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
fe00: 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
fe10: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
fe20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
fe30: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
fe40: 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
fe50: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
fe60: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
fe70: 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
fe80: 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
fe90: 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
fea0: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
feb0: 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
fec0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
fed0: 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
fee0: 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
fef0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
ff00: 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
ff10: 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
ff20: 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
ff30: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
ff40: 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
ff50: 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
ff60: 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
ff70: 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
ff80: 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
ff90: 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
ffa0: 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
ffb0: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
ffc0: 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
ffd0: 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
ffe0: 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
fff0: 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
10000 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
10010 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
10020 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
10030 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
10040 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
10050 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
10060 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
10070 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
10080 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
10090 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
100a0 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
100b0 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
100c0 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
100d0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
100e0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
100f0 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
10100 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
10110 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
10120 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
10130 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
10140 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
10150 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
10160 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
10170 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
10180 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
10190 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
101a0 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
101b0 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
101c0 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
101d0 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
101e0 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
101f0 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
10200 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
10210 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
10220 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
10230 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
10240 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
10250 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
10260 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
10270 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
10280 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
10290 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
102a0 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
102b0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
102c0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
102d0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
102e0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
102f0 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
10300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
10310 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
10320 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
10330 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
10340 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
10350 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
10360 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
10370 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
10380 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
10390 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
103a0 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
103b0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
103c0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
103d0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
103e0 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
103f0 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
10400 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
10410 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
10420 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
10430 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
10440 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
10450 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
10460 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
10470 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
10480 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
10490 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
104a0 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
104b0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
104c0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
104d0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
104e0 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
104f0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
10500 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
10510 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
10520 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
10530 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
10540 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
10550 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
10560 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
10570 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
10580 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
10590 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
105a0 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
105b0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
105c0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
105d0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
105e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
105f0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
10600 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
10610 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
10620 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
10630 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
10640 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
10650 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
10660 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
10670 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
10680 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
10690 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
106a0 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
106b0 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
106c0 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
106d0 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
106e0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
106f0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
10700 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
10710 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
10720 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
10730 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
10740 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
10750 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
10760 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
10770 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
10780 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
10790 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
107a0 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
107b0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
107c0 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
107d0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
107e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
107f0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
10800 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
10810 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
10820 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10830 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
10840 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
10850 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
10860 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
10870 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10880 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
10890 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
108a0 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
108b0 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
108c0 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
108d0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
108e0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
108f0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
10900 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
10910 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10920 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10930 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
10940 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a  rmation about a.
10950 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20  ** single index 
10960 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
10970 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72  already been par
10980 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
10990 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65  ividual.** value
109a0 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  s..**.** A recor
109b0 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
109c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
109d0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
109e0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
109f0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
10a00 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
10a10 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
10a20 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
10a30 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
10a40 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
10a50 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
10a60 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
10a70 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
10a80 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
10a90 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
10aa0 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
10ab0 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
10ac0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
10ad0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f  his structure ho
10ae0 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61  lds a record tha
10af0 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
10b00 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a  en disassembled.
10b10 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73  ** into its cons
10b20 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a  tituent fields..
10b30 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
10b40 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61   r2 member varia
10b50 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
10b60 65 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69  ed by the optimi
10b70 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  zed comparison.*
10b80 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65  * functions vdbe
10b90 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74  RecordCompareInt
10ba0 28 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72  () and vdbeRecor
10bb0 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29  dCompareString()
10bc0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
10bd0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
10be0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
10bf0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
10c00 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
10c10 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
10c20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
10c30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10c40 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
10c50 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
10c60 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
10c70 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
10c80 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
10c90 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
10ca0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
10cb0 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
10cc0 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
10cd0 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
10ce0 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  EM) */.  Mem *aM
10cf0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
10d00 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  Values */.  int 
10d10 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
10d20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
10d30 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
10d40 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20  ) */.  int r2;  
10d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
10d60 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
10d70 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a   (rhs < lhs) */.
10d80 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  };.../*.** Each 
10d90 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
10da0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
10db0 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
10dc0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
10dd0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
10de0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
10df0 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
10e00 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
10e10 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
10e20 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
10e30 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
10e40 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
10e50 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
10e60 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
10e70 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
10e80 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
10e90 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
10ea0 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
10eb0 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
10ec0 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
10ed0 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
10ee0 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
10ef0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
10f00 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
10f10 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
10f20 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
10f30 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
10f40 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
10f50 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
10f60 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
10f70 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
10f80 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
10f90 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
10fa0 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
10fb0 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
10fc0 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
10fd0 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
10fe0 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
10ff0 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
11000 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
11010 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
11020 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
11030 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
11040 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
11050 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
11060 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
11070 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
11080 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
11090 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
110a0 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
110b0 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
110c0 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
110d0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
110e0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
110f0 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
11100 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
11110 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
11120 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
11130 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
11140 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
11150 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
11160 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
11170 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
11180 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
11190 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
111a0 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
111b0 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
111c0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
111d0 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
111e0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
111f0 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
11200 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
11210 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
11220 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
11230 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
11240 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11250 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
11260 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
11270 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
11280 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
11290 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
112a0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
112b0 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
112c0 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
112d0 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
112e0 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
112f0 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
11300 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
11310 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
11320 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
11330 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
11340 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
11350 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
11360 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
11370 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
11380 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
11390 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
113a0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
113b0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
113c0 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
113d0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
113e0 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
113f0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
11400 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
11410 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
11420 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
11430 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
11440 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
11450 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
11460 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
11470 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
11480 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
11490 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
114a0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
114b0 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
114c0 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
114d0 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
114e0 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
114f0 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b  l indices */.  K
11500 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
11510 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b 65 79  ;       /* A Key
11520 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75 69 74  Info object suit
11530 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 69 6e  able for this in
11540 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  dex */.  int tnu
11550 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
11560 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
11570 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
11580 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
11590 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b  LogEst szIdxRow;
115a0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69           /* Esti
115b0 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f  mated average ro
115c0 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  w size in bytes 
115d0 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c  */.  u16 nKeyCol
115e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
115f0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11600 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b  ns forming the k
11610 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c  ey */.  u16 nCol
11620 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
11630 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11640 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20  lumns stored in 
11650 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
11660 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
11670 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
11680 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
11690 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
116a0 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
116b0 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20  gned idxType:2; 
116c0 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55       /* 1==UNIQU
116d0 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
116e0 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
116f0 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
11700 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
11710 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
11720 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
11730 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
11740 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
11750 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
11760 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
11770 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
11780 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75  l columns */.  u
11790 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65  nsigned isResize
117a0 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  d:1;    /* True 
117b0 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62  if resizeIndexOb
117c0 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20  ject() has been 
117d0 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69  called */.  unsi
117e0 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a  gned isCovering:
117f0 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
11800 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69  this is a coveri
11810 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64  ng index */.#ifd
11820 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
11830 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
11840 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
11850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11860 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
11870 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
11880 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f  .  int nSampleCo
11890 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  l;          /* S
118a0 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70  ize of IndexSamp
118b0 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f  le.anEq[] and so
118c0 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74   on */.  tRowcnt
118d0 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20   *aAvgEq;       
118e0 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71    /* Average nEq
118f0 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73   values for keys
11900 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
11910 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
11920 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
11930 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
11940 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
11950 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
11960 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
11970 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
11980 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
11990 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
119a0 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
119b0 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
119c0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
119d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
119e0 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
119f0 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
11a00 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
11a10 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
11a20 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
11a30 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
11a40 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
11a50 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
11a60 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
11a70 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
11a80 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
11a90 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
11aa0 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
11ab0 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
11ac0 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
11ad0 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
11ae0 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
11af0 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
11b00 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
11b10 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
11b20 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
11b30 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
11b40 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a  !=OE_None)../*.*
11b50 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
11b60 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
11b70 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
11b80 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
11b90 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
11ba0 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
11bb0 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
11bc0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
11bd0 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
11be0 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
11bf0 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
11c00 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
11c10 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
11c20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
11c30 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
11c40 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
11c50 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
11c60 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
11c70 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
11c80 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
11c90 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
11ca0 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
11cb0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
11cc0 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
11cd0 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
11ce0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
11cf0 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
11d00 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
11d10 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
11d20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
11d30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
11d40 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
11d50 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
11d60 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
11d70 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
11d80 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
11d90 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
11da0 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
11db0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
11dc0 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
11dd0 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
11de0 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
11df0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
11e00 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
11e10 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
11e20 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
11e30 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
11e40 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
11e50 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
11e60 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
11e70 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
11e80 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
11e90 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
11ea0 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
11eb0 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
11ec0 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
11ed0 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
11ee0 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
11ef0 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
11f00 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
11f10 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
11f20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
11f30 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
11f40 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
11f50 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11f60 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
11f70 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
11f80 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
11f90 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
11fa0 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
11fb0 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
11fc0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
11fd0 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
11fe0 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
11ff0 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
12000 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
12010 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
12020 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
12030 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
12040 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
12050 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
12060 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
12070 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
12080 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
12090 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
120a0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
120b0 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
120c0 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
120d0 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
120e0 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
120f0 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
12100 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
12110 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
12120 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
12130 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
12140 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
12150 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
12160 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
12170 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
12180 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
12190 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
121a0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
121b0 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
121c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
121d0 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
121e0 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
121f0 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
12200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12210 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
12220 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
12230 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
12240 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
12250 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
12260 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
12270 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
12280 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
12290 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122b0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
122c0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
122d0 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
122e0 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
122f0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
12300 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
12310 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
12320 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
12330 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
12340 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
12350 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
12360 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
12370 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12380 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
12390 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
123a0 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
123b0 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
123c0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
123d0 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
123e0 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
123f0 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
12400 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
12410 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
12420 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
12430 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
12440 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
12450 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
12460 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
12470 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
12480 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
12490 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
124a0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
124b0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
124c0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
124d0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
124e0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
124f0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
12500 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
12510 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
12520 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
12530 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
12540 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
12550 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
12560 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
12570 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
12580 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
12590 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
125a0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
125b0 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
125c0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
125d0 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
125e0 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
125f0 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
12600 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
12610 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12620 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
12630 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
12640 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
12650 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12660 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
12670 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
12680 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
126b0 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
126c0 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
126d0 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126f0 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
12700 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
12710 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
12720 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
12730 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
12740 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
12750 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
12760 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
12770 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
12780 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
12790 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
127a0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
127b0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
127c0 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
127d0 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
127e0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
127f0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
12800 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
12810 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
12820 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
12830 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
12840 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
12850 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
12860 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
12870 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
12880 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
12890 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
128a0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
128b0 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
128c0 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
128d0 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
128e0 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
128f0 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
12900 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
12910 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
12920 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
12930 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
12940 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
12950 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
12960 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
12970 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
12980 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
12990 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
129a0 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
129b0 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
129c0 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
129d0 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
129e0 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
129f0 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
12a00 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
12a10 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
12a20 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
12a30 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
12a40 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
12a50 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
12a60 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
12a70 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
12a80 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
12a90 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
12aa0 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
12ab0 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
12ac0 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
12ad0 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
12ae0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
12af0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
12b00 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
12b10 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
12b20 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
12b30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
12b40 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
12b50 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
12b60 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
12b70 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
12b80 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
12b90 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
12ba0 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
12bb0 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
12bc0 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
12bd0 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
12be0 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
12bf0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
12c00 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
12c10 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
12c20 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
12c30 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
12c40 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
12c50 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
12c60 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
12c70 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
12c80 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
12c90 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
12ca0 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
12cb0 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
12cc0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
12cd0 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
12ce0 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
12cf0 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
12d00 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54  K_BLOB, .** or T
12d10 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
12d20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
12d30 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
12d40 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
12d50 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
12d60 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
12d70 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
12d80 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
12d90 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
12da0 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
12db0 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
12dc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
12dd0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
12de0 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
12df0 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
12e00 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
12e10 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
12e20 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
12e30 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
12e40 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
12e50 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
12e60 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
12e70 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
12e80 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
12e90 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
12ea0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
12eb0 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
12ec0 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
12ed0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
12ee0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
12ef0 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
12f00 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
12f10 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
12f20 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
12f30 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
12f40 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
12f50 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
12f60 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12f70 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
12f80 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
12f90 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
12fa0 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
12fb0 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
12fc0 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
12fd0 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
12fe0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
12ff0 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
13000 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
13010 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
13020 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c  pList is .** val
13030 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
13040 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
13050 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
13060 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
13070 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
13080 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
13090 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
130a0 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
130b0 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
130c0 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
130d0 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
130e0 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
130f0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
13100 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
13110 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
13120 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
13130 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
13140 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
13150 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
13160 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
13170 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
13180 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
13190 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
131a0 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
131b0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
131c0 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
131d0 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
131e0 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
131f0 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
13200 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
13210 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
13220 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
13230 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
13240 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
13250 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
13260 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  k .** character 
13270 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
13280 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
13290 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
132a0 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  lds the index .*
132b0 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
132c0 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
132d0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
132e0 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
132f0 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
13300 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
13310 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
13320 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
13330 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
13340 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
13350 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
13360 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
13370 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
13380 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
13390 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
133a0 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
133b0 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
133c0 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
133d0 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
133e0 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
133f0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
13400 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
13410 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
13420 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
13430 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
13440 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
13450 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
13460 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
13470 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
13480 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
13490 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
134a0 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
134b0 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
134c0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
134d0 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
134e0 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
134f0 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
13500 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
13510 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
13520 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
13530 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
13540 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
13550 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
13560 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
13570 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
13580 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
13590 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
135a0 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
135b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
135c0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
135d0 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
135e0 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
135f0 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
13600 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
13610 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13620 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
13630 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
13640 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
13650 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
13660 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
13670 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
13680 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
13690 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
136a0 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
136b0 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
136c0 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
136d0 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
136e0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
136f0 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
13700 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
13710 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
13720 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
13730 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
13740 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
13750 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
13760 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
13770 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
13780 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
13790 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
137a0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
137b0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
137c0 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
137d0 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
137e0 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
137f0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
13800 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
13810 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
13820 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
13830 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
13840 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
13850 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
13860 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
13870 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
13880 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
13890 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
138a0 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
138b0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
138c0 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
138d0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
138e0 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
138f0 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
13900 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
13910 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
13920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
13930 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
13940 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
13950 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
13960 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
13970 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
13980 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
13990 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
139a0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
139b0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
139c0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
139d0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
139e0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
139f0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
13a00 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
13a10 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
13a20 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a  unction. .  ****
13a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a70 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
13a80 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13a90 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
13aa0 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
13ab0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
13ac0 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
13ad0 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
13ae0 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
13af0 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
13b00 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
13b10 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
13b20 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
13b30 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
13b40 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
13b50 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
13b60 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
13b70 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
13b80 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
13b90 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
13ba0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
13bb0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
13bc0 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
13bd0 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
13be0 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
13bf0 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
13c00 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
13c10 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
13c20 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
13c30 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
13c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c80 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
13c90 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
13ca0 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
13cb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
13cc0 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
13cd0 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
13ce0 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
13cf0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
13d00 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
13d10 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
13d20 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
13d30 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
13d60 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
13d70 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13d90 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
13da0 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
13dd0 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30 20 74  nlikely:  1000 t
13de0 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
13df0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
13e00 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
13e10 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
13e20 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
13e30 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
13e60 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
13e70 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
13e80 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
13e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
13ea0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
13eb0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
13ec0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
13ed0 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
13ee0 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
13ef0 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
13f00 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
13f10 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
13f20 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
13f30 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
13f40 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
13f50 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
13f80 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
13f90 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
13fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13fb0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
13fc0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
13fd0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
13fe0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
13ff0 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
14000 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
14010 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
14020 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
14030 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
14040 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
14050 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
14060 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
14070 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14080 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
14090 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
140a0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
140b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
140c0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
140d0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64  01 /* Originated
140e0 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   in ON or USING 
140f0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
14100 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
14110 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
14120 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
14130 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
14140 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
14150 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
14160 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
14170 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
14180 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
14190 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
141a0 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
141b0 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
141c0 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
141d0 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
141e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
141f0 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
14200 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
14210 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
14220 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
14230 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
14240 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
14250 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
14260 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
14270 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
14280 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
14290 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
142a0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
142b0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
142c0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
142d0 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
142e0 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
142f0 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
14300 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
14310 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
14320 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
14330 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
14340 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
14350 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
14360 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
14370 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
14380 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
14390 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
143a0 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
143b0 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
143c0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
143d0 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
143e0 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
143f0 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
14400 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
14410 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
14420 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
14430 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
14440 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
14450 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
14460 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
14470 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
14480 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
14490 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
144a0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
144b0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
144c0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
144d0 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
144e0 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
144f0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
14500 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
14510 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
14520 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
14530 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
14540 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
14550 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
14560 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
14570 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
14580 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
14590 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
145a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
145b0 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
145c0 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
145d0 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
145e0 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
145f0 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
14600 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
14610 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
14620 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
14630 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e  efine EP_Constan
14640 74 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e  t  0x080000 /* N
14650 6f 64 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e  ode is a constan
14660 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  t */../*.** Thes
14670 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
14680 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
14690 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
146a0 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72   in the .** Expr
146b0 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
146c0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
146d0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
146e0 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
146f0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
14700 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
14710 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
14720 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
14730 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
14740 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
14750 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
14760 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
14770 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
14780 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
14790 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
147a0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
147b0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
147c0 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
147d0 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
147e0 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
147f0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
14800 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
14810 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
14820 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
14830 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
14840 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
14850 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
14860 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
14870 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
14880 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
14890 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
148a0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
148b0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
148c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
148d0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
148e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
148f0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
14900 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
14910 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
14920 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
14930 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
14940 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
14950 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
14960 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
14970 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
14980 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
14990 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
149a0 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
149b0 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
149c0 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
149d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
149e0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
149f0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
14a00 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
14a10 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
14a20 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
14a30 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
14a40 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
14a50 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
14a60 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
14a70 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
14a80 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
14a90 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
14aa0 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
14ab0 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
14ac0 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
14ad0 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
14ae0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
14af0 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
14b00 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
14b10 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
14b20 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
14b30 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
14b40 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
14b50 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
14b60 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
14b70 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
14b80 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
14b90 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
14ba0 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
14bb0 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
14bc0 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
14bd0 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
14be0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
14bf0 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
14c00 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
14c10 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
14c20 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
14c30 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
14c40 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
14c50 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
14c60 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
14c70 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
14c80 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
14c90 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
14ca0 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
14cb0 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
14cc0 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
14cd0 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
14ce0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
14cf0 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
14d00 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
14d10 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
14d20 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
14d30 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
14d40 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
14d50 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
14d60 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
14d70 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
14d80 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
14d90 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
14da0 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
14db0 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
14dc0 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
14dd0 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
14de0 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
14df0 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
14e00 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
14e10 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
14e20 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
14e30 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
14e40 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
14e50 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
14e60 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
14e70 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
14e80 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
14e90 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
14ea0 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
14eb0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
14ec0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
14ed0 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
14ee0 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
14ef0 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
14f00 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
14f10 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
14f20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
14f30 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
14f40 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
14f50 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
14f60 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
14f70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
14f80 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
14f90 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
14fa0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
14fb0 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
14fc0 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
14fd0 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
14fe0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
14ff0 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
15000 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
15010 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
15020 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
15030 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
15040 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
15050 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
15060 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
15070 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
15080 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
15090 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
150a0 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
150b0 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
150c0 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
150d0 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
150e0 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
150f0 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
15100 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
15110 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
15120 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
15130 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
15140 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
15150 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
15160 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
15170 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
15180 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
15190 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
151a0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
151b0 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
151c0 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
151d0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
151e0 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
151f0 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
15200 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
15230 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
15240 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
15250 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
15260 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15270 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
15280 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
15290 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
152a0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
152b0 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
152c0 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
152d0 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
152e0 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
152f0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
15300 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
15310 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
15320 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
15330 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
15340 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
15350 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
15360 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
15370 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
15380 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
15390 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
153a0 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
153b0 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
153c0 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
153d0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
153e0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
153f0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
15400 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
15410 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
15420 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
15430 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
15440 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
15450 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
15460 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
15470 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
15480 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
15490 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
154a0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
154b0 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
154c0 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
154d0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
154e0 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
154f0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
15500 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
15510 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
15520 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
15530 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
15540 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
15550 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
15560 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
15570 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
15580 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
15590 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
155a0 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
155b0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
155c0 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
155d0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
155e0 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
155f0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
15600 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
15610 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
15620 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
15630 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
15640 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
15650 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
15660 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
15670 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
15680 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
15690 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
156a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
156b0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
156c0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
156d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
156e0 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
156f0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
15700 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
15710 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
15720 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
15730 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
15740 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
15750 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
15760 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
15770 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
15780 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
15790 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
157a0 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
157b0 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
157c0 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
157d0 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
157e0 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
157f0 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
15800 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
15810 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
15820 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
15830 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
15840 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
15850 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
15860 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
15870 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
15880 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
15890 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
158a0 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
158b0 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
158c0 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
158d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
158e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
158f0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
15900 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
15910 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
15920 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
15930 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
15940 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
15950 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
15960 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
15970 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
15980 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
15990 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
159a0 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
159b0 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
159c0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
159d0 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
159e0 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
159f0 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
15a00 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
15a10 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
15a20 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
15a30 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
15a40 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
15a50 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
15a60 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
15a70 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
15a80 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
15a90 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
15aa0 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
15ab0 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
15ac0 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
15ad0 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
15ae0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
15af0 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
15b00 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
15b10 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
15b20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
15b30 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
15b40 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
15b50 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
15b60 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
15b70 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
15b80 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
15b90 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
15ba0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
15bb0 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
15bc0 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
15bd0 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
15be0 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
15bf0 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
15c00 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
15c10 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
15c20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
15c30 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
15c40 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
15c50 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
15c60 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
15c70 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
15c80 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
15c90 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
15ca0 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
15cb0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
15cc0 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
15cd0 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
15ce0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
15cf0 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
15d00 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
15d10 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
15d20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
15d30 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
15d40 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
15d50 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
15d60 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
15d70 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
15d80 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
15d90 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
15da0 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
15db0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
15dc0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
15dd0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
15de0 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
15df0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
15e00 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
15e10 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
15e20 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
15e30 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
15e40 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
15e50 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
15e60 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
15e70 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15e80 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
15e90 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
15ea0 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
15eb0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
15ec0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
15ed0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
15ee0 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
15ef0 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
15f00 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
15f10 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
15f20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
15f30 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
15f40 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
15f50 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
15f60 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
15f70 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
15f80 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
15f90 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
15fa0 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
15fb0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
15fc0 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
15fd0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20  utine */.    u8 
15fe0 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
15ff0 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
16000 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65  etween this able
16010 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
16020 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  s */.    unsigne
16030 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
16040 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
16050 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
16060 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
16070 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
16080 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
16090 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
160a0 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
160b0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
160c0 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
160d0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
160e0 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
160f0 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ne */.    unsign
16100 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
16110 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
16120 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
16130 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
16140 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
16150 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
16160 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
16170 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
16180 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
16190 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
161a0 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
161b0 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
161c0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
161d0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
161e0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
161f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
16200 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
16210 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
16220 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
16230 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
16240 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
16250 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
16260 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
16270 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
16280 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
16290 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
162a0 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
162b0 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b     char *zIndex;
162c0 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69       /* Identifi
162d0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
162e0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
162f0 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ause */.    Inde
16300 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a  x *pIndex;    /*
16310 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
16320 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
16330 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79  o zIndex, if any
16340 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
16350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
16360 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
16370 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
16380 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
16390 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
163a0 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
163b0 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
163c0 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
163d0 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
163e0 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
163f0 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
16400 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
16410 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
16420 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
16430 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
16440 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
16450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
16460 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
16470 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
16480 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
16490 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
164a0 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
164b0 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
164c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
164d0 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
164e0 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
164f0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
16500 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
16510 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
16520 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
16530 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
16540 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
16550 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
16560 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
16570 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
16580 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
16590 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
165a0 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
165b0 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
165c0 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
165d0 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
165e0 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
165f0 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
16600 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
16610 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
16620 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
16630 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16640 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
16650 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
16660 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
16670 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
16680 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16690 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
166a0 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
166b0 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
166c0 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
166d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
166e0 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
166f0 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
16700 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
16710 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
16720 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
16730 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
16740 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
16750 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
16760 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
16770 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
16780 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30  OPEN_CLOSE  0x00
16790 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
167a0 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
167b0 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
167c0 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
167d0 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  E      0x0020 /*
167e0 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
167f0 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
16800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16810 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
16820 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c     0x0040 /* Onl
16830 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
16840 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
16850 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16860 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20  E_AND_ONLY      
16870 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e     0x0080 /* Don
16880 27 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66  't use indices f
16890 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23  or OR terms */.#
168a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
168b0 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
168c0 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0100 /* pOrderBy
168d0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
168e0 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
168f0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
16900 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  Y       0x0200 /
16910 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
16920 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
16930 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
16940 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
16950 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20  TINCT    0x0400 
16960 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
16970 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
16980 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
16990 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
169a0 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53       0x0800 /* S
169b0 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
169c0 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
169d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52  .#define WHERE_R
169e0 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20  EOPEN_IDX       
169f0 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f  0x1000 /* Try to
16a00 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64   use OP_ReopenId
16a10 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  x */../* Allowed
16a20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
16a30 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
16a40 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
16a50 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
16a60 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
16a70 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
16a80 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
16a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16aa0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
16ab0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
16ac0 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
16ad0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
16ae0 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
16af0 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
16b00 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
16b10 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16b20 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
16b30 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
16b40 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
16b50 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
16b60 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
16b70 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
16b80 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
16b90 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
16ba0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
16bb0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
16bc0 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
16bd0 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
16be0 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
16bf0 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
16c00 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
16c10 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
16c20 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
16c30 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
16c40 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
16c50 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
16c60 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
16c70 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
16c80 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
16c90 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
16ca0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
16cb0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
16cc0 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
16cd0 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
16ce0 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
16cf0 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
16d00 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
16d10 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
16d20 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
16d30 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
16d40 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
16d50 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
16d60 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
16d70 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
16d80 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
16d90 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
16da0 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
16db0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
16dc0 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
16dd0 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
16de0 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
16df0 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
16e00 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
16e10 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
16e20 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
16e30 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
16e40 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
16e50 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
16e60 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
16e70 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
16e80 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
16e90 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
16ea0 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
16eb0 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
16ec0 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
16ed0 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
16ee0 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
16ef0 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
16f00 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
16f10 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
16f20 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
16f30 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
16f40 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
16f50 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
16f60 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
16f70 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
16f80 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
16f90 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
16fa0 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
16fb0 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
16fc0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
16fd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
16fe0 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
16ff0 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
17000 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
17010 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
17020 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
17030 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
17040 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
17050 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
17060 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
17070 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
17080 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
17090 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
170a0 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
170b0 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
170c0 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
170d0 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
170e0 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
170f0 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
17100 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
17110 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17120 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
17130 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
17140 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
17150 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
17160 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
17170 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
17180 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
17190 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c  mes */.  u8 ncFl
171a0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
171b0 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
171c0 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
171d0 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
171e0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
171f0 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
17200 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
17210 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
17220 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
17230 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67  x01    /* Aggreg
17240 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
17250 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
17260 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
17270 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20 2f  Agg    0x02    /
17280 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
17290 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
172a0 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
172b0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
172c0 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x04    /* True i
172d0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
172e0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
172f0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
17300 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
17310 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20  0x08    /* True 
17320 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
17330 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
17340 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
17350 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
17360 31 30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  10    /* True if
17370 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
17380 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
17390 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
173a0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
173b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
173c0 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
173d0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
173e0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
173f0 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
17400 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
17410 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
17420 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
17430 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
17440 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
17450 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
17460 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
17470 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
17480 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
17490 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
174a0 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
174b0 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
174c0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
174d0 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
174e0 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
174f0 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
17500 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
17510 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
17520 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
17530 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
17540 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
17550 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
17560 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
17570 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
17580 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
17590 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
175a0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
175b0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
175c0 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
175d0 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
175e0 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
175f0 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
17600 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
17610 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
17620 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
17630 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
17640 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
17650 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
17660 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
17670 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
17680 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
17690 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
176a0 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
176b0 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
176c0 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
176d0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
176e0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
176f0 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
17700 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
17710 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
17720 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
17730 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
17740 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
17750 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
17760 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
17770 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
17780 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
17790 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
177a0 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
177b0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
177c0 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
177d0 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
177e0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
177f0 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
17800 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
17810 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
17820 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
17830 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
17840 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
17850 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75  TK_EXCEPT */.  u
17860 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  16 selFlags;    
17870 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
17880 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
17890 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
178a0 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
178b0 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
178c0 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
178d0 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
178e0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
178f0 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
17900 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
17910 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
17920 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
17930 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
17940 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
17950 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
17960 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
17970 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
17980 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
17990 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
179a0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
179b0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
179c0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
179d0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
179e0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
179f0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
17a00 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
17a10 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
17a20 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
17a30 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
17a40 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
17a50 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
17a60 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
17a70 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
17a80 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
17a90 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
17aa0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
17ab0 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
17ac0 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
17ad0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
17ae0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
17af0 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
17b00 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
17b10 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
17b20 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
17b30 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
17b40 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
17b50 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
17b60 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
17b70 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
17b80 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
17b90 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
17ba0 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
17bb0 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
17bc0 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
17bd0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
17be0 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
17bf0 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
17c00 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
17c10 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
17c20 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lag"..*/.#define
17c30 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
17c40 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
17c50 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
17c60 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
17c70 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
17c80 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
17c90 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
17ca0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
17cb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
17cc0 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30  ggregate       0
17cd0 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69  x0004  /* Contai
17ce0 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
17cf0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
17d00 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
17d10 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20  al   0x0008  /* 
17d20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
17d30 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
17d40 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
17d50 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30  nded        0x00
17d60 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  10  /* sqlite3Se
17d70 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
17d80 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
17d90 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
17da0 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30  eInfo     0x0020
17db0 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
17dc0 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
17dd0 6d 65 74 61 64 61 74 61 20 2a 2f 0a 20 20 20 20  metadata */.    
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 2f 2a 20 20 20 20 20 30 78 30 30 34 30 20 20 4e  /*     0x0040  N
17e00 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69  OT USED */.#defi
17e10 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
17e20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a        0x0080  /*
17e30 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
17e40 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
17e50 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
17e60 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
17e70 30 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a  0100  NOT USED *
17e80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
17e90 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30  tedFrom      0x0
17ea0 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  200  /* Part of 
17eb0 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
17ec0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
17ed0 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
17ee0 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30  onvert    0x0400
17ef0 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
17f00 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
17f10 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
17f20 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
17f30 69 76 65 20 20 20 20 20 20 20 30 78 30 38 30 30  ive       0x0800
17f40 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
17f50 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
17f60 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
17f70 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
17f80 64 20 20 20 20 20 20 20 20 30 78 31 30 30 30 20  d        0x1000 
17f90 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
17fa0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
17fb0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
17fc0 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
17fd0 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
17fe0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
17ff0 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
18000 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
18010 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
18020 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
18030 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
18040 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
18050 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
18060 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
18070 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
18080 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
18090 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20 20  ry index .**    
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
180c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
180d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
180e0 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
180f0 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
18100 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
18110 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
18120 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
18130 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
18140 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
18150 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
18160 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
18170 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18180 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
18190 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
181a0 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
181b0 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
181c0 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
181d0 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
181e0 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
181f0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
18200 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
18210 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
18220 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
18250 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
18260 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
18270 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
18280 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
18290 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
182a0 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
182b0 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
182c0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
182d0 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
182e0 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
182f0 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
18300 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
18310 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
18320 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
18330 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
18340 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
18350 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
18360 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18370 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
18380 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
18390 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
183a0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
183d0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
183e0 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
183f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18400 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
18410 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
18420 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
18430 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
18450 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
18460 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
18470 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
18480 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
18490 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
184a0 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
184b0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
184c0 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
184f0 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
18500 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
18510 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  rm. .**         
18520 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
18530 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
18540 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
18550 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
18580 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
18590 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
185a0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
185b0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
185c0 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
185d0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
185e0 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
185f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18600 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
18610 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
18620 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
18630 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18650 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
18660 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
18670 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
186a0 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
186b0 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
186c0 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
186d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
186e0 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
186f0 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
18700 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
18710 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
18720 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
18730 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18750 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
18760 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
18770 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
18780 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18790 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
187a0 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
187b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
187c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
187f0 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
18800 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
18810 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
18840 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
18850 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
18860 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
18870 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
18880 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
18890 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
188a0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
188b0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
188c0 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
188d0 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
188e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
188f0 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
18900 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
18910 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
18920 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
18930 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
18940 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
18950 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
18960 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
18990 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
189a0 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
189b0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
189c0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
189d0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
189e0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
189f0 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
18a00 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
18a10 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
18a20 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
18a50 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
18a60 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
18a70 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
18aa0 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
18ab0 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
18ac0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
18ad0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
18ae0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
18af0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
18b00 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
18b20 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
18b30 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
18b40 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
18b50 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
18b70 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
18b80 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
18b90 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
18ba0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
18bb0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
18bc0 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
18bf0 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
18c00 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
18c10 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18c30 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
18c40 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
18c50 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
18c60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
18c70 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
18c80 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
18c90 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
18ca0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
18cb0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
18cc0 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
18cd0 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
18ce0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
18cf0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
18d00 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
18d10 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
18d20 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
18d30 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
18d40 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
18d50 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
18d60 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
18d70 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
18d80 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
18d90 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
18da0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
18db0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
18dc0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
18dd0 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
18de0 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
18df0 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
18e00 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
18e10 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
18e20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
18e30 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
18e40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
18e50 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
18e60 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
18e70 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
18e80 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
18e90 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
18ea0 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
18eb0 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
18ec0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
18ed0 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
18ee0 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
18ef0 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
18f00 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
18f10 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
18f20 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
18f30 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
18f40 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
18f50 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
18f60 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
18f70 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
18f80 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
18f90 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
18fa0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
18fb0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
18fc0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
18fd0 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
18fe0 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
18ff0 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
19000 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
19010 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
19020 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
19030 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
19040 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
19050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19060 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
19070 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19080 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
19090 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
190a0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
190b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
190c0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
190d0 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
190e0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
190f0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
19100 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
19110 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
19120 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
19130 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
19140 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
19150 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
19160 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
19170 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
19180 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
19190 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
191a0 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
191b0 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
191c0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
191d0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
191e0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
191f0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
19200 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
19210 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
19220 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
19230 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
19240 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
19250 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
19260 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
19270 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
19280 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
19290 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
192a0 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
192b0 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
192c0 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
192d0 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
192e0 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
192f0 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
19300 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
19310 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
19320 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
19330 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
19340 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
19350 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
19360 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
19370 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
19380 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
19390 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
193a0 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
193b0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
193c0 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
193d0 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
193e0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
193f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
19400 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
19410 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
19420 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
19430 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
19440 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
19450 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
19460 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
19470 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
19480 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
19490 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
194a0 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
194b0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
194c0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
194d0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
194e0 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
194f0 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
19500 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
19510 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
19520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
19530 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
19540 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
19550 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
19560 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
19570 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
19580 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
19590 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
195a0 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
195b0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
195c0 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
195d0 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
195e0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
195f0 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
19600 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
19610 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
19620 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
19630 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
19640 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
19650 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
19660 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
19670 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19680 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
19690 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
196a0 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
196b0 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
196c0 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
196d0 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
196e0 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
196f0 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
19700 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
19710 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
19720 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
19730 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
19740 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
19750 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
19760 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
19770 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
19780 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
19790 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
197a0 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
197b0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
197c0 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
197d0 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
197e0 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
197f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
19800 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
19810 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
19820 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
19830 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
19840 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
19850 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
19860 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
19870 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
19880 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
19890 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
198a0 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
198b0 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
198c0 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
198d0 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
198e0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
198f0 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
19900 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
19910 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
19920 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
19930 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
19940 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
19950 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
19960 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
19970 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
19980 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
19990 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
199a0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
199b0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
199c0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
199d0 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
199e0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
199f0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
19a00 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
19a10 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
19a20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
19a30 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
19a40 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
19a50 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
19a60 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
19a70 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
19a80 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
19a90 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
19aa0 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
19ab0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
19ac0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
19ad0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
19ae0 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
19af0 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
19b00 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
19b10 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
19b20 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
19b30 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
19b40 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
19b50 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
19b60 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
19b70 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
19b80 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
19b90 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
19ba0 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
19bb0 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
19bc0 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
19bd0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
19be0 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
19bf0 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
19c00 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
19c10 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
19c20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
19c30 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
19c40 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
19c50 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
19c60 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
19c70 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
19c80 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
19c90 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
19ca0 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
19cb0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
19cc0 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
19cd0 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
19ce0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
19cf0 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
19d00 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
19d10 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
19d20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
19d30 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
19d40 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
19d50 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
19d60 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
19d70 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
19d80 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
19d90 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
19da0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
19db0 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
19dc0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
19dd0 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
19de0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
19df0 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
19e00 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
19e10 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
19e20 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
19e30 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
19e40 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
19e50 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
19e60 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
19e70 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
19e80 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
19e90 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
19ea0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
19eb0 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
19ec0 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
19ed0 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
19ee0 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
19ef0 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
19f00 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
19f10 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
19f20 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
19f30 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
19f40 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
19f50 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
19f60 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
19f70 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
19f80 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
19f90 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
19fa0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
19fb0 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
19fc0 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
19fd0 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
19fe0 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
19ff0 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20   .** feature is 
1a000 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1a010 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1a020 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1a030 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1a040 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1a050 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1a060 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1a070 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1a080 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1a090 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1a0a0 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1a0b0 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1a0c0 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1a0d0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1a0e0 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1a0f0 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1a100 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1a110 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1a120 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1a130 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1a140 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1a150 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1a160 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1a170 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1a180 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1a190 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1a1a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1a1b0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1a1c0 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1a1d0 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1a1e0 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1a1f0 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1a200 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1a210 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1a220 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1a230 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1a240 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1a250 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1a260 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1a270 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a280 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1a290 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1a2a0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1a2b0 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1a2c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a2d0 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1a2e0 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1a2f0 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1a300 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1a310 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1a320 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1a330 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1a340 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1a350 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1a360 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1a370 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1a380 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1a390 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1a3a0 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1a3b0 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1a3c0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1a3d0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1a3e0 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1a3f0 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1a400 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1a410 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69 6e  onstants */.  in
1a420 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
1a430 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
1a440 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
1a450 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
1a460 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1a470 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1a480 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1a490 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1a4a0 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1a4b0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1a4c0 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1a4d0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1a4e0 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1a4f0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1a500 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1a510 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1a520 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1a530 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1a540 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1a550 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1a560 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1a570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a580 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1a590 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1a5a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
1a5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a5c0 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
1a5d0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1a5e0 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
1a5f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a600 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
1a610 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
1a620 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
1a630 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a640 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
1a650 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1a660 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65  ] */.  int iFixe
1a670 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dOp;        /* N
1a680 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70  ever back out op
1a690 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31  codes iFixedOp-1
1a6a0 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20   or earlier */. 
1a6b0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1a6c0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1a6d0 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1a6e0 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1a6f0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1a700 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20 20   iPartIdxTab;   
1a710 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65    /* Table corre
1a720 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61  sponding to a pa
1a730 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20  rtial index */. 
1a740 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
1a750 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
1a760 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
1a770 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
1a780 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
1a790 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
1a7a0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1a7b0 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
1a7c0 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
1a7d0 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  ru values */.  i
1a7e0 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
1a7f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a800 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a   labels used */.
1a810 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20    int *aLabel;  
1a820 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
1a830 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65  to hold the labe
1a840 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  ls */.  struct y
1a850 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
1a860 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
1a870 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
1a880 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
1a890 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20     i16 iColumn; 
1a8a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1a8b0 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
1a8c0 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
1a8d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
1a8e0 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
1a8f0 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
1a900 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
1a910 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
1a920 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1a930 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
1a940 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
1a950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1a960 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
1a970 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
1a980 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
1a990 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
1a9a0 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
1a9b0 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
1a9c0 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
1a9d0 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
1a9e0 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
1a9f0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
1aa00 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
1aa10 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
1aa20 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  try */.  ExprLis
1aa30 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1aa40 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1aa50 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1aa60 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1aa70 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1aa80 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1aa90 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1aaa0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1aab0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1aac0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1aad0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1aae0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1aaf0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1ab00 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1ab10 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1ab20 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1ab30 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75    int cookieValu
1ab40 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  e[SQLITE_MAX_ATT
1ab50 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61  ACHED+2];  /* Va
1ab60 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20  lues of cookies 
1ab70 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69  to verify */.  i
1ab80 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
1ab90 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1aba0 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
1abb0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
1abc0 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
1abd0 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
1abe0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1abf0 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
1ac00 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
1ac10 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
1ac20 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
1ac30 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
1ac40 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
1ac50 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
1ac60 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1ac70 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
1ac80 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
1ac90 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
1aca0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
1acb0 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
1acc0 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
1acd0 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
1ace0 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
1acf0 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
1ad00 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
1ad10 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
1ad20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
1ad30 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
1ad40 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
1ad50 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e  ters */..  /* In
1ad60 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77  formation used w
1ad70 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67  hile coding trig
1ad80 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f  ger programs. */
1ad90 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
1ada0 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
1adb0 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
1adc0 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
1add0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
1ade0 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
1adf0 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
1ae00 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1ae10 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
1ae20 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
1ae30 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
1ae40 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1ae50 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
1ae60 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  BLE */.  int add
1ae70 72 53 6b 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a  rSkipPK;      /*
1ae80 20 41 64 64 72 65 73 73 20 6f 66 20 69 6e 73 74   Address of inst
1ae90 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20  ruction to skip 
1aea0 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
1aeb0 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  x */.  u32 nQuer
1aec0 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
1aed0 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
1aee0 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
1aef0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
1af00 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
1af10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1af20 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1af30 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1af40 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
1af50 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1af60 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1af70 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1af80 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
1af90 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
1afa0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
1afb0 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
1afc0 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
1afd0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1afe0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1aff0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
1b000 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
1b010 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
1b020 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
1b030 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
1b040 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
1b050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
1b090 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
1b0a0 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
1b0b0 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
1b0c0 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
1b0d0 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
1b0e0 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
1b0f0 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
1b100 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
1b110 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
1b120 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
1b130 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61 72  setof(Parse,nVar
1b140 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66 69  ) so the nVar fi
1b150 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 20  eld must be the 
1b160 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a  first field.  **
1b170 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
1b180 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
1b190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1d0 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61  ****/..  int nVa
1b1e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1b1f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b200 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65  '?' variables se
1b210 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f  en in the SQL so
1b220 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a   far */.  int nz
1b230 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1b240 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b250 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73   available slots
1b260 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20   in azVar[] */. 
1b270 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
1b280 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
1b290 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
1b2a0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1b2b0 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65 65 57  Y */.  u8 bFreeW
1b2c0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
1b2d0 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57 69 74   /* True if pWit
1b2e0 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65  h should be free
1b2f0 64 20 77 69 74 68 20 70 61 72 73 65 72 20 2a 2f  d with parser */
1b300 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b320 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
1b330 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
1b340 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
1b350 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1b360 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1b370 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
1b380 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
1b390 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
1b3a0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1b3b0 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
1b3c0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
1b3d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b3e0 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
1b3f0 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
1b400 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61  ndif.  int nAlia
1b410 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1b420 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
1b430 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74  iased result set
1b440 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e   columns */.  in
1b450 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
1b460 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
1b470 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
1b480 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
1b490 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
1b4a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
1b4b0 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65  XPLAIN.  int iSe
1b4c0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20  lectId;         
1b4d0 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72     /* ID of curr
1b4e0 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45  ent select for E
1b4f0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1b500 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65  .  int iNextSele
1b510 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ctId;        /* 
1b520 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  Next available s
1b530 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50  elect ID for EXP
1b540 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  LAIN output */.#
1b550 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61  endif.  char **a
1b560 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1b570 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f    /* Pointers to
1b580 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65   names of parame
1b590 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  ters */.  Vdbe *
1b5a0 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
1b5b0 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
1b5c0 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
1b5d0 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
1b5e0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1b5f0 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f  *zTail;        /
1b600 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
1b610 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
1b620 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
1b630 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
1b640 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ble;         /* 
1b650 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f  A table being co
1b660 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45  nstructed by CRE
1b670 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54  ATE TABLE */.  T
1b680 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
1b690 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
1b6a0 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
1b6b0 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
1b6c0 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
1b6d0 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
1b6e0 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
1b6f0 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
1b700 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
1b710 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  ks */.  Token sN
1b720 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
1b730 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
1b740 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
1b750 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
1b760 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  /.  Token sLastT
1b770 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1b780 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
1b790 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65  parsed */.#ifnde
1b7a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1b7b0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
1b7c0 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
1b7d0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
1b7e0 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
1b7f0 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
1b800 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
1b810 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
1b820 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
1b830 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
1b840 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
1b850 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
1b860 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
1b870 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
1b880 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
1b890 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
1b8a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1b8b0 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
1b8c0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
1b8d0 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
1b8e0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1b8f0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1b900 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
1b910 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1b920 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  */.};../*.** Ret
1b930 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
1b940 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
1b950 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1b960 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
1b970 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1b980 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1b990 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1b9a0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
1b9b0 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
1b9c0 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
1b9d0 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
1b9e0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1b9f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1ba00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1ba10 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
1ba20 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
1ba30 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
1ba40 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
1ba50 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
1ba60 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
1ba70 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
1ba80 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
1ba90 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
1baa0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1bab0 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
1bac0 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
1bad0 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
1bae0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1baf0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1bb00 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
1bb10 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
1bb20 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
1bb30 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
1bb40 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
1bb50 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  des..*/.#define 
1bb60 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
1bb70 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1bb80 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
1bb90 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65  ->nChange */.#de
1bba0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54  fine OPFLAG_LAST
1bbb0 52 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20  ROWID     0x02  
1bbc0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1bbd0 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  te db->lastRowid
1bbe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1bbf0 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20  AG_ISUPDATE     
1bc00 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73   0x04    /* This
1bc10 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
1bc20 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
1bc30 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
1bc40 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38  PEND        0x08
1bc50 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
1bc60 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
1bc70 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ppend */.#define
1bc80 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
1bc90 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a  ESULT 0x10    /*
1bca0 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20   Try to avoid a 
1bcb0 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73  seek in BtreeIns
1bcc0 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ert() */.#define
1bcd0 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43   OPFLAG_CLEARCAC
1bce0 48 45 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  HE    0x20    /*
1bcf0 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61   Clear pseudo-ta
1bd00 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f  ble cache in OP_
1bd10 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e  Column */.#defin
1bd20 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
1bd30 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f  RG     0x40    /
1bd40 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
1bd50 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68   used for length
1bd60 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1bd70 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
1bd80 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50     0x80    /* OP
1bd90 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
1bda0 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a  d for typeof() *
1bdb0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1bdc0 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30  _BULKCSR       0
1bdd0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x01    /* OP_Ope
1bde0 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e  n** used to open
1bdf0 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a   bulk cursor */.
1be00 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1be10 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 30  2ISREG       0x0
1be20 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  2    /* P2 to OP
1be30 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
1be40 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
1be50 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1be60 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
1be70 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
1be80 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
1be90 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20  utation */../*. 
1bea0 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
1beb0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
1bec0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
1bed0 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
1bee0 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
1bef0 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a  uct Trigger. . *
1bf00 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20  . * Pointers to 
1bf10 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  instances of str
1bf20 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20  uct Trigger are 
1bf30 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61  stored in two wa
1bf40 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65  ys.. * 1. In the
1bf50 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68   "trigHash" hash
1bf60 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20   table (part of 
1bf70 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61  the sqlite3* tha
1bf80 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
1bf90 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65   . *    database
1bfa0 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
1bfb0 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
1bfc0 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
1bfd0 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
1bfe0 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
1bff0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
1c000 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
1c010 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
1c020 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
1c030 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
1c040 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
1c050 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1c060 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1c070 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
1c080 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
1c090 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
1c0a0 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
1c0b0 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
1c0c0 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
1c0d0 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
1c0e0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
1c0f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
1c100 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
1c110 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
1c120 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
1c130 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
1c140 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
1c150 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
1c160 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1c170 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
1c180 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1c190 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
1c1a0 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
1c1d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c1e0 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
1c1f0 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
1c200 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
1c210 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1c220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1c230 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1c240 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1c250 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
1c260 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
1c270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1c280 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
1c290 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
1c2a0 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
1c2b0 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
1c2c0 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
1c2d0 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
1c2e0 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
1c2f0 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
1c300 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
1c310 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
1c320 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
1c330 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
1c340 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c360 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
1c370 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
1c380 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1c390 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
1c3a0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1c3b0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
1c3c0 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
1c3d0 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
1c3e0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1c3f0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
1c400 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
1c410 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
1c420 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
1c430 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
1c440 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
1c450 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
1c460 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
1c470 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
1c480 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
1c490 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
1c4a0 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
1c4b0 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
1c4c0 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
1c4d0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
1c4e0 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
1c4f0 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a  mine which. .**.
1c500 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
1c510 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
1c520 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
1c530 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
1c540 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
1c550 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
1c560 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
1c570 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
1c580 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
1c590 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
1c5a0 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
1c5b0 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
1c5c0 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
1c5d0 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
1c5e0 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
1c5f0 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
1c600 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
1c610 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
1c620 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
1c630 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49  rogram. . *. * I
1c640 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
1c650 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
1c660 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
1c670 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
1c680 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
1c690 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
1c6a0 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
1c6b0 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
1c6c0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
1c6d0 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  he . * associate
1c6e0 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
1c6f0 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
1c700 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1c710 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1c720 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
1c730 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
1c740 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20  ger-program.. * 
1c750 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
1c760 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
1c770 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
1c780 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
1c790 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
1c7a0 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
1c7b0 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
1c7c0 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
1c7d0 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
1c7e0 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20  rmined by the . 
1c7f0 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
1c800 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
1c810 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
1c820 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
1c830 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
1c840 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
1c850 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
1c860 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1c870 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1c880 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
1c890 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1c8b0 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
1c8c0 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
1c8d0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
1c8e0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1c8f0 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1c900 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1c910 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1c920 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73  the table to ins
1c930 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78  ert into.. * pEx
1c940 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69  prList -> If thi
1c950 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1c960 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e  NTO ... VALUES .
1c970 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1c980 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1c990 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76     this stores v
1c9a0 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65  alues to be inse
1c9b0 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20  rted. Otherwise 
1c9c0 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74  NULL.. * pIdList
1c9d0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1c9e0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1c9f0 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  ... (<column-nam
1ca00 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20  es>) VALUES ... 
1ca10 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1ca20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1ca30 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
1ca40 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
1ca50 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
1ca60 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
1ca70 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
1ca80 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61  TK_DELETE). * ta
1ca90 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1caa0 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1cab0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1cac0 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
1cad0 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
1cae0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1caf0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1cb00 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
1cb10 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1cb20 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1cb30 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1cb40 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70  NULL.. * . * (op
1cb50 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
1cb60 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
1cb70 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
1cb80 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
1cb90 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
1cba0 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20  pdate rows of.. 
1cbb0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
1cbc0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1cbd0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
1cbe0 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
1cbf0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
1cc10 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1cc20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
1cc30 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
1cc40 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
1cc50 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
1cc60 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
1cc70 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
1cc80 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
1cc90 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
1cca0 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
1ccb0 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
1ccc0 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
1ccd0 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69   . */.struct Tri
1cce0 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20  ggerStep {.  u8 
1ccf0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1cd00 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
1cd10 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
1cd20 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f  , TK_INSERT, TK_
1cd30 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f  SELECT */.  u8 o
1cd40 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1cd50 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20   /* OE_Rollback 
1cd60 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65  etc. */.  Trigge
1cd70 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f  r *pTrig;      /
1cd80 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68  * The trigger th
1cd90 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20  at this step is 
1cda0 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53  a part of */.  S
1cdb0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1cdc0 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74      /* SELECT st
1cdd0 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  atment or RHS of
1cde0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20   INSERT INTO .. 
1cdf0 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
1ce00 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20  Token target;   
1ce10 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
1ce20 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
1ce30 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
1ce40 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1ce50 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
1ce60 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1ce70 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
1ce80 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
1ce90 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
1cea0 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
1ceb0 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
1cec0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
1ced0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
1cee0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
1cef0 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
1cf00 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
1cf10 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
1cf20 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
1cf30 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
1cf40 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
1cf50 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
1cf60 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
1cf70 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
1cf80 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1cf90 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1cfa0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
1cfb0 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
1cfc0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
1cfd0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
1cfe0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
1cff0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
1d000 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
1d010 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79  xplicit.  .*/.ty
1d020 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
1d030 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
1d040 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
1d050 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1d060 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1d070 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
1d080 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
1d090 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53  tten here */.  S
1d0a0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1d0b0 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20     /* Fix items 
1d0c0 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  to this schema *
1d0d0 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79  /.  int bVarOnly
1d0e0 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b  ;       /* Check
1d0f0 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65   for variable re
1d100 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f  ferences only */
1d110 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1d120 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
1d130 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
1d140 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
1d150 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
1d160 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1d170 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
1d180 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1d190 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1d1a0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
1d1b0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
1d1c0 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
1d1d0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1d1e0 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1d1f0 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
1d200 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
1d210 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
1d220 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
1d230 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
1d240 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
1d250 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
1d260 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
1d270 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
1d280 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72  d..*/.struct Str
1d290 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65  Accum {.  sqlite
1d2a0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1d2b0 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
1d2c0 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
1d2d0 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
1d2e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65  */.  char *zBase
1d2f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  ;         /* A b
1d300 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ase allocation. 
1d310 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63   Not from malloc
1d320 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  . */.  char *zTe
1d330 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
1d340 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
1d350 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
1d360 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20  int  nChar;     
1d370 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
1d380 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
1d390 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41  far */.  int  nA
1d3a0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
1d3b0 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
1d3c0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
1d3d0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78  ext */.  int  mx
1d3e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1d3f0 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
1d400 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
1d410 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
1d420 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
1d430 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
1d440 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
1d450 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
1d460 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
1d470 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43         /* STRACC
1d480 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41  UM_NOMEM or STRA
1d490 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d  CCUM_TOOBIG */.}
1d4a0 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
1d4b0 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
1d4c0 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
1d4d0 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41  OBIG  2../*.** A
1d4e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
1d4f0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
1d500 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
1d510 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
1d520 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
1d530 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
1d540 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
1d550 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1d560 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
1d570 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
1d580 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
1d590 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
1d5a0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
1d5b0 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
1d5c0 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
1d5d0 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
1d5e0 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
1d5f0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1d600 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
1d610 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
1d620 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
1d630 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d650 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
1d660 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
1d670 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
1d680 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
1d690 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
1d6a0 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
1d6b0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
1d6c0 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
1d6d0 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
1d6e0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
1d6f0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
1d700 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
1d710 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
1d720 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d740 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1d750 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
1d760 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
1d770 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1d780 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1d790 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
1d7a0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
1d7b0 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d7d0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
1d7e0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
1d7f0 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d810 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
1d820 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
1d830 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
1d840 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d860 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
1d870 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
1d880 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
1d890 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d8b0 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
1d8c0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
1d8d0 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d8f0 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
1d900 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
1d910 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
1d920 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1d930 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1d940 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1d950 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
1d960 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1d990 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
1d9a0 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  t */.  sqlite3_m
1d9b0 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
1d9c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
1d9d0 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
1d9e0 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
1d9f0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
1da00 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
1da10 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
1da20 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
1da30 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1da40 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
1da50 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
1da60 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
1da70 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
1da80 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
1dab0 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
1dac0 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dae0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
1daf0 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
1db00 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
1db30 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
1db40 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1db50 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
1db60 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
1db70 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
1db80 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
1db90 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1dbb0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
1dbc0 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
1dbd0 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dbf0 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
1dc00 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
1dc10 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1dc20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1dc30 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
1dc40 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
1dc50 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dc70 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
1dc80 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
1dc90 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcb0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
1dcc0 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1dcd0 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dcf0 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
1dd00 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
1dd10 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1dd40 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
1dd50 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
1dd60 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
1dd70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
1dd80 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
1dd90 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
1dda0 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
1ddb0 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
1ddc0 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
1ddd0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1dde0 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
1ddf0 69 6e 74 20 6e 57 6f 72 6b 65 72 3b 20 20 20 20  int nWorker;    
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 77    /* Number of w
1de20 6f 72 6b 65 72 20 74 68 72 65 61 64 73 20 74 6f  orker threads to
1de30 20 75 73 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65   use */.  /* The
1de40 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1de50 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1de60 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1de70 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1de80 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1de90 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1dea0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1deb0 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ded0 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1dee0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1def0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1df00 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1df30 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1df40 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1df50 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1df80 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1df90 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1dfa0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dfc0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1dfd0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1dfe0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1dff0 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1e000 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e010 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1e020 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1e030 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1e040 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e050 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e060 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1e070 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
1e080 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1e090 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1e0a0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1e0b0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1e0c0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1e0d0 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1e0e0 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1e0f0 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1e100 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1e110 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e130 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1e140 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
1e150 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1e160 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1e170 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1e180 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1e190 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1e1a0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1e1b0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1e1c0 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1e1d0 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
1e1e0 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
1e1f0 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
1e200 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
1e210 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
1e220 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
1e230 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
1e240 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
1e250 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
1e260 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
1e270 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
1e280 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
1e290 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
1e2a0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1e2b0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
1e2c0 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e2f0 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
1e300 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1e310 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
1e320 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
1e330 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
1e340 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
1e350 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
1e360 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
1e370 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
1e380 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
1e390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1e3a0 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
1e3b0 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
1e3c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
1e3d0 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
1e3e0 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
1e3f0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
1e400 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
1e410 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
1e420 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
1e430 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1e440 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
1e450 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1e460 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
1e470 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
1e480 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
1e490 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
1e4a0 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
1e4b0 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
1e4c0 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
1e4d0 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
1e4e0 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
1e4f0 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
1e500 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
1e510 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
1e520 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
1e530 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
1e540 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
1e550 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
1e560 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
1e570 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
1e580 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1e590 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
1e5a0 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
1e5b0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
1e5c0 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
1e5d0 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
1e5e0 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
1e5f0 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1e600 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
1e610 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
1e620 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
1e630 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
1e640 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1e650 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1e660 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1e670 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1e680 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1e690 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1e6a0 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1e6b0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1e6c0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1e6d0 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1e6e0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1e6f0 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1e700 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1e710 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
1e720 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
1e730 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
1e740 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
1e750 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1e760 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1e770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e790 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1e7a0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1e7b0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
1e7e0 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69  queries */.  uni
1e7f0 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1e820 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1e830 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1e840 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e860 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1e870 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1e880 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
1e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8a0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
1e8b0 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  er value */.    
1e8c0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1e8d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1e8e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
1e8f0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
1e900 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
1e910 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
1e920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1e930 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
1e940 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1e950 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
1e960 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
1e970 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
1e980 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
1e990 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1e9a0 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
1e9b0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
1e9c0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1e9d0 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
1e9e0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1e9f0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1ea00 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
1ea10 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1ea20 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1ea30 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
1ea40 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  lect*);../*.** R
1ea50 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1ea60 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
1ea70 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
1ea80 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
1ea90 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
1eaa0 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
1eab0 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
1eac0 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
1ead0 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
1eae0 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
1eaf0 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
1eb00 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
1eb10 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
1eb20 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
1eb30 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
1eb40 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
1eb50 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
1eb60 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1eb70 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1eb80 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
1eb90 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
1eba0 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
1ebb0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
1ebc0 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
1ebd0 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
1ebe0 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
1ebf0 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
1ec00 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ec20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
1ec30 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1ec40 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
1ec50 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
1ec60 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
1ec70 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
1ec80 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
1ec90 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ecb0 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
1ecc0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1ecd0 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
1ece0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ed00 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
1ed10 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
1ed20 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
1ed30 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1ed40 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
1ed50 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
1ed60 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
1ed70 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
1ed80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1ed90 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
1eda0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
1edb0 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20  nst char *zErr; 
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1edd0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
1ede0 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
1edf0 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
1ee00 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73  1];.};../*.** As
1ee10 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
1ee20 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
1ee30 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
1ee40 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
1ee50 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
1ee60 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
1ee70 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
1ee80 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
1ee90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
1eea0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
1eeb0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
1eec0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
1eed0 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
1eee0 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef00 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
1ef10 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
1ef20 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1ef40 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
1ef80 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
1ef90 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
1efa0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
1efb0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
1efc0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
1efd0 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
1efe0 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
1eff0 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
1f000 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
1f010 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
1f020 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
1f030 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
1f040 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
1f050 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
1f060 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
1f070 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
1f080 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1f090 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
1f0a0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
1f0b0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
1f0c0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
1f0d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1f0e0 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
1f0f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
1f100 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
1f110 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1f120 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
1f130 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1f140 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1f150 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
1f160 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
1f170 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
1f180 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1f190 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
1f1a0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1f1b0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
1f1c0 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
1f1d0 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
1f1e0 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
1f1f0 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
1f200 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
1f210 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
1f220 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
1f230 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
1f240 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  so all.** the SQ
1f250 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1f260 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
1f270 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72  as an alisse for
1f280 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1f290 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
1f2a0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1f2b0 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
1f2c0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1f2d0 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
1f2e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1f2f0 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS3.#endif../*.*
1f300 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
1f310 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
1f320 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
1f330 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
1f340 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
1f350 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
1f360 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
1f370 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
1f380 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1f390 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
1f3a0 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
1f3b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1f3c0 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
1f3d0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
1f3e0 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
1f3f0 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
1f400 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1f410 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
1f420 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
1f430 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
1f440 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
1f450 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
1f460 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
1f470 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
1f480 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
1f490 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
1f4a0 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
1f4b0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1f4c0 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
1f4d0 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
1f4e0 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
1f4f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f500 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
1f510 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
1f520 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1f530 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
1f540 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f550 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
1f560 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1f570 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1f580 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
1f590 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1f5a0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1f5b0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1f5c0 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
1f5d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f5e0 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
1f5f0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1f600 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1f610 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
1f620 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1f630 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1f640 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1f650 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
1f660 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f670 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
1f680 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1f690 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1f6a0 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
1f6b0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1f6c0 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
1f6d0 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
1f6e0 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
1f6f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1f700 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
1f710 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
1f720 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1f730 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1f740 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
1f750 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1f760 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1f770 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1f780 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
1f790 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1f7a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f7b0 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
1f7c0 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
1f7d0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1f7e0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1f7f0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
1f800 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1f810 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f820 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
1f830 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
1f840 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1f850 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
1f860 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
1f870 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1f880 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1f890 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
1f8a0 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
1f8b0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
1f8c0 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
1f8d0 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
1f8e0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
1f8f0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
1f900 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
1f910 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
1f920 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
1f930 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
1f940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
1f950 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
1f960 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
1f970 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  c(int);.void *sq
1f980 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
1f990 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1f9a0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1f9b0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1f9c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
1f9d0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
1f9e0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  *, int);.char *s
1f9f0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
1fa00 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1fa10 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
1fa20 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
1fa30 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1fa40 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1fa50 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
1fa60 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  id*, int);.void 
1fa70 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
1fa80 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
1fa90 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1faa0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1fab0 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
1fac0 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1fad0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
1fae0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
1faf0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1fb00 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
1fb10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
1fb20 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
1fb30 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
1fb40 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
1fb50 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
1fb60 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
1fb70 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
1fb80 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
1fb90 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1fba0 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
1fbb0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
1fbc0 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
1fbd0 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ult(void);.void 
1fbe0 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
1fbf0 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
1fc00 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
1fc10 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71  )(void));.int sq
1fc20 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
1fc30 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
1fc40 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
1fc50 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
1fc60 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
1fc70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
1fc80 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
1fc90 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
1fca0 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
1fcb0 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
1fcc0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
1fcd0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
1fce0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
1fcf0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
1fd00 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
1fd10 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
1fd20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
1fd30 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
1fd40 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
1fd50 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
1fd60 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
1fd70 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
1fd80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
1fd90 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
1fda0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1fdb0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
1fdc0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
1fdd0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1fde0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
1fdf0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
1fe00 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
1fe10 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
1fe20 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65  ,P)       .#else
1fe30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fe40 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
1fe50 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
1fe60 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
1fe70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1fe80 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
1fe90 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
1fea0 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
1feb0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1fec0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
1fed0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
1fee0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
1fef0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1ff00 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
1ff10 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1ff20 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1ff30 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
1ff40 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1ff50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
1ff60 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
1ff70 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
1ff80 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
1ff90 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
1ffa0 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
1ffb0 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
1ffc0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1ffd0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
1ffe0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
1fff0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
20000 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
20010 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
20020 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
20030 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
20040 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
20050 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
20060 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
20070 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
20080 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
20090 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
200a0 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
200b0 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
200c0 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e  ite3StatusAdd(in
200d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
200e0 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
200f0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64  nt, int);..#ifnd
20100 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
20110 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
20120 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
20130 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
20140 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20150 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
20160 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
20170 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
20180 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
20190 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
201a0 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
201b0 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
201c0 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
201d0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
201e0 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
201f0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
20200 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
20210 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20230 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
20240 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
20250 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
20260 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20270 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
20280 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
20290 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
202a0 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
202b0 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
202c0 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53  */.};..#define S
202d0 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
202e0 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69  ERNAL 0x01.#defi
202f0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
20300 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76  _SQLFUNC  0x02.v
20310 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
20320 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
20330 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
20340 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20   va_list);.void 
20350 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
20360 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63  trAccum*, u32, c
20370 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
20380 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
20390 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
203a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
203b0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
203c0 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
203d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
203e0 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73  a_list);.char *s
203f0 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73  qlite3MAppendf(s
20400 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f  qlite3*,char*,co
20410 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
20420 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20430 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69  TE_TEST) || defi
20440 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
20450 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
20460 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
20470 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
20480 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20490 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
204a0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
204b0 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
204c0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
204d0 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d  ../* Output form
204e0 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54  atting for SQLIT
204f0 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41  E_TESTCTRL_EXPLA
20500 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  IN */.#if define
20510 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
20520 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20  TREE_EXPLAIN).  
20530 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
20540 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b  ainBegin(Vdbe*);
20550 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20560 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62  xplainPrintf(Vdb
20570 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
20580 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71   ...);.  void sq
20590 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56  lite3ExplainNL(V
205a0 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
205b0 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68  lite3ExplainPush
205c0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
205d0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f  sqlite3ExplainPo
205e0 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  p(Vdbe*);.  void
205f0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
20600 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  inish(Vdbe*);.  
20610 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
20620 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c  ainSelect(Vdbe*,
20630 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69   Select*);.  voi
20640 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
20650 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72  Expr(Vdbe*, Expr
20660 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20670 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
20680 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73  t(Vdbe*, ExprLis
20690 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t*);.  const cha
206a0 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78  r *sqlite3VdbeEx
206b0 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29  planation(Vdbe*)
206c0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
206d0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
206e0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
206f0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
20700 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66  elect(A,B).# def
20710 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
20720 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65  inExpr(A,B).# de
20730 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
20740 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29  ainExprList(A,B)
20750 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20760 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58  3ExplainFinish(X
20770 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20780 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
20790 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
207a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
207b0 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
207c0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
207d0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
207e0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
207f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20800 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
20810 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
20820 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
20830 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
20840 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
20850 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
20860 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
20870 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
20880 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
20890 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
208a0 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
208b0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
208c0 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
208d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
208e0 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
208f0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
20900 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
20910 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
20920 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
20930 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
20940 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
20950 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
20960 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
20970 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
20980 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
20990 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
209a0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
209b0 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
209c0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
209d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
209e0 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
209f0 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
20a00 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
20a10 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
20a20 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
20a30 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
20a40 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
20a50 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
20a60 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
20a70 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
20a80 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
20a90 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
20aa0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
20ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
20ac0 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
20ad0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
20ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
20af0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
20b00 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
20b10 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
20b20 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
20b30 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
20b40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
20b50 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
20b60 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
20b70 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
20b80 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
20b90 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
20ba0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
20bb0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
20bc0 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
20bd0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
20be0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
20bf0 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
20c00 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
20c10 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
20c20 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
20c30 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
20c40 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
20c50 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
20c60 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
20c70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
20c80 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
20c90 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
20ca0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
20cb0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
20cc0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
20cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
20ce0 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
20cf0 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
20d00 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
20d10 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
20d20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
20d30 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
20d40 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
20d50 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
20d60 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
20d70 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
20d80 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
20d90 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
20da0 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
20db0 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
20dc0 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
20dd0 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
20de0 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
20df0 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
20e00 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
20e10 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
20e20 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
20e30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20e40 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
20e50 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
20e60 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
20e70 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
20e80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
20e90 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
20ea0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
20eb0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
20ec0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
20ed0 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
20ee0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
20ef0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
20f00 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
20f10 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
20f20 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
20f30 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
20f40 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
20f50 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
20f60 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
20f70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
20f80 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
20f90 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
20fa0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
20fb0 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
20fc0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
20fd0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
20fe0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
20ff0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
21000 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
21010 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
21020 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
21030 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
21040 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
21050 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
21060 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20  rse *);..#ifdef 
21070 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
21080 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e  TIN_TEST.# defin
21090 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
210a0 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
210b0 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
210c0 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
210d0 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
210e0 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
210f0 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
21100 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
21110 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
21120 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
21130 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
21140 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
21150 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
21160 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
21170 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
21180 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
21190 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
211a0 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
211b0 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ec*);.int sqlite
211c0 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
211d0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52  st(int,int*);..R
211e0 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
211f0 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
21200 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
21210 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
21220 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
21230 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
21240 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
21250 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
21260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
21270 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
21280 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
21290 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
212a0 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
212b0 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
212c0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
212d0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
212e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
212f0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
21300 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
21310 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
21320 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
21330 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21340 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
21350 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
21360 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
21370 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
21380 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
21390 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
213a0 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
213b0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
213c0 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
213d0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
213e0 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
213f0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
21400 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
21410 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
21420 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21430 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
21440 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
21450 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21460 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
21470 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
21480 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
21490 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
214a0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
214b0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
214c0 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
214d0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
214e0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
214f0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
21500 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
21510 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21520 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
21530 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
21540 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
21550 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
21560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
21570 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
21580 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
21590 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
215a0 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
215b0 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
215c0 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
215d0 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
215e0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
215f0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
21600 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
21610 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
21620 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
21630 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
21640 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
21650 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
21660 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
21670 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
21680 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
21690 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
216a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
216b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
216c0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
216d0 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
216e0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
216f0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
21700 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
21730 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
21740 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
21750 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
21760 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
21770 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
21780 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  oken *);.int sql
21790 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
217a0 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
217b0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
217c0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
217d0 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
217e0 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
217f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
21800 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
21810 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
21820 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
21830 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
21840 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
21850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
21860 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
21870 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
21880 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
21890 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
218a0 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
218b0 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
218c0 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
218d0 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
218e0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
218f0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
21900 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
21930 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21940 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
21950 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
21960 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21970 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
21980 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
21990 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
219a0 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
219b0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
219c0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
219d0 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219f0 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
21a00 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70  t*,u16,Expr*,Exp
21a10 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21a20 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
21a30 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
21a40 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
21a50 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
21a60 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
21a70 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
21a80 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
21a90 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
21aa0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
21ab0 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
21ac0 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
21ad0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
21ae0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
21af0 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
21b00 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
21b10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21b20 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
21b30 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
21b40 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
21b50 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
21b60 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
21b70 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
21b80 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
21b90 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
21ba0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
21bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
21bc0 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
21bd0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
21be0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
21bf0 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
21c00 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
21c10 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
21c20 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
21c30 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
21c40 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
21c50 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
21c60 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72  .u64 sqlite3Wher
21c70 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
21c80 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
21c90 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
21ca0 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
21cb0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
21cc0 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
21cd0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
21ce0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
21cf0 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
21d00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
21d10 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
21d20 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
21d30 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
21d40 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
21d50 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
21d60 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
21d70 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
21d80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
21d90 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
21da0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
21db0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
21dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21dd0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
21de0 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
21df0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
21e00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21e10 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
21e20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
21e30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21e40 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
21e50 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
21e60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21e70 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
21e80 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
21e90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
21ea0 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
21eb0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21ec0 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
21ed0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
21ee0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21ef0 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
21f00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21f10 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
21f20 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
21f30 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21f40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
21f50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
21f60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21f70 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
21f80 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
21f90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21fa0 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
21fb0 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
21fc0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
21fd0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
21fe0 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
21ff0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
22000 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
22010 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
22020 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22030 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
22040 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
22050 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
22060 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
22070 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
22080 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75  xprList*, int, u
22090 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
220a0 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
220b0 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
220c0 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
220d0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
220e0 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
220f0 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
22100 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
22110 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71  terms */.void sq
22120 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
22130 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
22140 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22150 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
22160 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22170 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
22180 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
22190 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
221a0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
221b0 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
221c0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
221d0 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
221e0 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
221f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
22200 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
22210 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
22220 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
22230 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
22240 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
22250 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
22260 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22270 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
22280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22290 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
222a0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
222b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
222c0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
222d0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
222e0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
222f0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22300 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
22310 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
22320 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
22330 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
22340 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
22350 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
22360 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
22370 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
22380 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
22390 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
223a0 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
223b0 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
223c0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
223d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
223e0 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c  pliesExpr(Expr*,
223f0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
22400 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
22410 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
22420 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
22430 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
22440 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
22450 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
22460 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
22470 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
22480 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
22490 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
224a0 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
224b0 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  dbe(Parse*);.voi
224c0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
224d0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
224e0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
224f0 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
22500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22510 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
22520 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
22530 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
22540 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
22550 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22560 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
22570 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
22580 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
22590 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
225a0 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
225b0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
225c0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
225d0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
225e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
225f0 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
22600 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
22610 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
22620 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
22630 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
22640 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
22650 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
22660 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
22670 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
22680 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
22690 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
226a0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
226b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
226c0 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
226d0 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
226e0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
226f0 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
22700 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
22710 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
22720 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
22730 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
22740 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
22750 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22760 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
22770 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
22780 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
22790 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
227a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
227b0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
227c0 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73  teRowDelete(Pars
227d0 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65  e*,Table*,Trigge
227e0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  r*,int,int,int,i
227f0 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f  16,u8,u8,u8);.vo
22800 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
22810 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
22820 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22830 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29   int, int, int*)
22840 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
22850 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
22860 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
22870 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
22880 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
22890 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
228a0 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
228b0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
228c0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
228d0 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73  ConstraintChecks
228e0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
228f0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
22900 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  int,.           
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c            u8,u8,
22930 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
22940 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
22950 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
22960 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
22970 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
22980 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
22990 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
229a0 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
229b0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  le*, int, int, u
229c0 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
229d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
229e0 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
229f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
22a00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22a10 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
22a20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22a30 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
22a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
22a50 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
22a60 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
22a70 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
22a80 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
22a90 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
22aa0 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
22ab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22ac0 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
22ad0 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
22ae0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
22af0 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
22b00 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
22b10 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
22b20 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
22b30 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
22b40 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
22b50 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
22b60 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
22b70 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
22b80 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
22b90 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
22ba0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
22bb0 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
22bc0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
22bd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
22be0 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e  uncDefInsert(Fun
22bf0 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44  cDefHash*, FuncD
22c00 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  ef*);.FuncDef *s
22c10 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
22c20 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
22c30 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c  t char*,int,int,
22c40 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
22c50 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
22c60 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
22c70 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22c80 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
22c90 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
22ca0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
22cb0 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
22cc0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
22cd0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
22ce0 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
22cf0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
22d00 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
22d10 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
22d20 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
22d30 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
22d40 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
22d50 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22d60 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
22d70 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
22d80 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
22d90 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
22da0 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
22db0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
22dc0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
22dd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
22de0 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
22df0 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
22e00 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
22e10 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
22e20 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
22e50 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
22e60 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
22e70 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
22e80 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
22e90 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
22ea0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
22eb0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
22ec0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22ed0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
22ee0 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
22ef0 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
22f00 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
22f10 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
22f20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
22f30 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
22f40 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
22f50 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
22f60 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
22f70 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
22f80 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
22f90 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
22fa0 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
22fb0 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
22fc0 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
22fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fe0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22ff0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
23000 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
23010 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
23020 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
23030 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23040 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
23050 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
23060 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
23070 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
23080 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23090 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
230a0 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
230b0 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
230c0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
230d0 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
230e0 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
230f0 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
23100 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
23110 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
23120 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
23130 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23160 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
23170 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
23180 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
23190 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
231a0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
231b0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
231c0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
231d0 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
231e0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
231f0 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
23200 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
23210 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
23220 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
23230 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
23240 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
23250 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
23260 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
23270 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
23280 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
23290 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
232a0 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
232b0 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
232c0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
232d0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
232e0 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
232f0 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
23300 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
23310 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
23320 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
23330 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
23340 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
23350 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
23360 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
23370 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
23380 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
23390 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
233a0 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
233b0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
233c0 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
233d0 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
233e0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
233f0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
23400 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
23410 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
23420 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
23430 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23440 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
23450 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
23460 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
23470 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
23480 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
23490 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
234a0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
234b0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
234c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
234d0 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
234e0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
234f0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
23500 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23510 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
23520 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
23530 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
23540 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
23550 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
23560 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
23570 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
23580 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
23590 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
235a0 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
235b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
235c0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
235d0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
235e0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
235f0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
23600 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
23610 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
23620 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
23630 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
23640 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
23650 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
23660 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
23670 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
23680 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
23690 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
236a0 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
236b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
236c0 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
236d0 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
236e0 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
236f0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
23700 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
23710 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
23720 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
23730 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
23740 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
23750 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
23760 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
23770 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
23780 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
23790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
237a0 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
237b0 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
237c0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
237d0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
237e0 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
237f0 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
23800 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23810 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
23820 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
23830 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
23840 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
23850 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
23860 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
23870 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
23880 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
23890 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
238a0 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
238b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
238c0 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
238d0 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
238e0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
238f0 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
23900 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
23910 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
23920 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
23930 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
23940 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
23950 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
23960 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
23970 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
23980 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
23990 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
239a0 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
239b0 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
239c0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
239d0 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
239e0 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
239f0 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
23a00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23a10 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
23a20 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
23a30 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
23a40 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34  ble);.#endif.u64
23a50 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
23a60 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a  Int(LogEst);../*
23a70 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
23a80 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
23a90 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
23aa0 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
23ab0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
23ac0 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
23ad0 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
23ae0 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
23af0 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
23b00 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
23b10 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
23b20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
23b30 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
23b40 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
23b50 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
23b60 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
23b70 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
23b80 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
23b90 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
23ba0 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
23bb0 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
23bc0 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
23bd0 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
23be0 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
23bf0 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
23c00 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
23c10 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
23c20 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
23c30 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
23c40 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
23c50 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
23c60 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
23c70 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
23c80 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
23c90 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
23ca0 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
23cb0 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
23cc0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
23cd0 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
23ce0 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
23cf0 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
23d00 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
23d10 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
23d20 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
23d30 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
23d40 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
23d50 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
23d60 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
23d70 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
23d80 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
23d90 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
23da0 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
23db0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
23dc0 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20  nityStr(Vdbe *, 
23dd0 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73  Index *);.void s
23de0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
23df0 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
23e00 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
23e10 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
23e20 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
23e30 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
23e40 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
23e50 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
23e60 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
23e70 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
23e80 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
23e90 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
23ea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
23eb0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
23ec0 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
23ed0 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
23ee0 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
23ef0 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
23f00 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
23f10 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
23f20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
23f30 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
23f40 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
23f50 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  *,int);.void *sq
23f60 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73  lite3HexToBlob(s
23f70 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
23f80 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a  har *z, int n);.
23f90 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
23fa0 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73  nt(int h);.int s
23fb0 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
23fc0 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  e(Parse *, Token
23fd0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
23fe0 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66  en **);..#if def
23ff0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
24000 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ) .const char *s
24010 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
24020 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
24030 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
24040 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
24050 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
24060 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
24070 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
24080 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
24090 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
240a0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
240b0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
240c0 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
240d0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
240e0 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
240f0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24100 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
24110 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
24120 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
24130 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
24140 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
24150 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
24160 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
24170 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
24180 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
24190 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
241a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
241b0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
241c0 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
241d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
241e0 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
241f0 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
24200 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
24210 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
24220 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
24230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
24240 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
24250 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
24260 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
24270 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
24280 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
24290 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
242a0 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
242b0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
242c0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
242d0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
242e0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
242f0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
24300 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
24310 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
24320 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24330 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
24340 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
24350 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
24360 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
24370 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
24380 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
24390 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
243a0 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
243b0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
243c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
243d0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
243e0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
243f0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
24400 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
24410 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
24420 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
24430 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
24440 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
24450 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
24460 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
24470 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
24480 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
24490 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
244a0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
244b0 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
244c0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
244d0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
244e0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
244f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
24500 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
24510 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
24520 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
24530 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
24540 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
24550 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
24560 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
24570 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24580 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
24590 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
245a0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
245b0 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
245c0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
245d0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
245e0 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
245f0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
24600 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
24610 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
24620 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
24630 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
24640 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
24650 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
24660 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
24670 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
24680 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
24690 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
246a0 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  te3GlobalFunctio
246b0 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
246c0 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
246d0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
246e0 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
246f0 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
24700 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
24710 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
24720 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24730 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
24740 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
24750 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24760 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
24770 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
24780 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
24790 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
247a0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
247b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
247c0 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
247d0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
247e0 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
247f0 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
24800 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
24810 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
24820 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
24830 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
24840 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
24850 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
24860 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ct(Parse *, Expr
24870 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
24880 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
24890 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
248a0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
248b0 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
248c0 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
248d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
248e0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
248f0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24900 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
24910 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
24920 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
24930 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
24940 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
24950 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
24960 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
24970 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
24980 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
24990 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
249a0 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
249b0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
249c0 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
249d0 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
249e0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
249f0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
24a00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
24a10 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
24a20 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
24a30 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24a40 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
24a50 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
24a60 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
24a70 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
24a80 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
24a90 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
24aa0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
24ab0 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
24ac0 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
24ad0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
24ae0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
24af0 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
24b00 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
24b10 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
24b20 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
24b30 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
24b40 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
24b50 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
24b60 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
24b70 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
24b80 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
24b90 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
24ba0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
24bb0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
24bc0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
24bd0 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
24be0 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
24bf0 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
24c00 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
24c10 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
24c20 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
24c30 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
24c40 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
24c50 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
24c60 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
24c70 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
24c80 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
24c90 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
24ca0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
24cb0 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74  inimumFileFormat
24cc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
24cd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24ce0 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
24cf0 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
24d00 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
24d10 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
24d20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
24d30 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
24d40 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
24d50 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
24d60 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
24d70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
24d80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24d90 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
24da0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
24db0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
24dc0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
24dd0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
24de0 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
24df0 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
24e00 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24e10 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
24e20 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
24e30 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
24e40 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
24e50 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
24e60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
24e70 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
24e80 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
24e90 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
24ea0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
24eb0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
24ec0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
24ed0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
24ee0 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
24ef0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
24f00 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
24f10 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
24f20 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
24f30 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
24f40 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
24f50 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
24f60 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
24f70 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
24f80 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
24f90 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
24fa0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
24fb0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
24fc0 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
24fd0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
24fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
24ff0 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
25000 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
25010 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25020 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53  te3AppendSpace(S
25030 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63  trAccum*,int);.c
25040 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
25050 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
25060 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
25070 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
25080 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
25090 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
250a0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
250b0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
250c0 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
250d0 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
250e0 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
250f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
25100 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
25110 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
25120 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
25130 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
25140 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
25150 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
25160 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
25170 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
25180 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
25190 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
251a0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
251b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
251c0 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
251d0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
251e0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
251f0 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
25200 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
25210 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
25220 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
25230 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
25240 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
25250 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
25260 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
25270 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
25280 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
25290 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
252a0 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
252b0 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
252c0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
252d0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
252e0 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
252f0 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
25300 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
25310 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65  oc(void*(*)(size
25320 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  _t));.void sqlit
25330 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
25340 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
25350 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
25360 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
25370 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65  nt, Token, Parse
25380 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  *);.#ifdef YYTRA
25390 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
253a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
253b0 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
253c0 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
253d0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
253e0 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
253f0 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
25400 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
25410 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
25420 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
25430 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
25440 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
25450 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
25460 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
25470 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
25480 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
25490 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
254a0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
254b0 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
254c0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
254d0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
254e0 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
254f0 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
25500 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
25510 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
25520 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
25530 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
25540 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
25550 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25560 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
25570 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
25580 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
25590 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
255a0 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
255b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
255c0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
255d0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
255e0 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
255f0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
25600 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
25610 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
25620 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23  e3VtabLock(X) .#
25630 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
25640 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
25650 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25660 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
25670 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
25680 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
25690 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
256a0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
256b0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
256c0 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
256d0 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
256e0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
256f0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
25700 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
25710 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
25720 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
25730 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
25740 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
25750 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
25760 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73  Vdbe*);.   int s
25770 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
25780 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
25790 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
257a0 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
257b0 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
257c0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
257d0 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
257e0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
257f0 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
25800 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
25810 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
25820 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
25830 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
25840 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
25850 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
25860 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
25870 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
25880 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
25890 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
258a0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
258b0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
258c0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
258d0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
258e0 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
258f0 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
25900 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f  ns==0).#endif.vo
25910 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
25920 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
25930 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
25940 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
25950 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
25960 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
25970 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
25980 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
25990 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
259a0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
259b0 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
259c0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
259d0 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
259e0 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
259f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25a00 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
25a10 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
25a20 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
25a30 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
25a40 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
25a50 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
25a60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
25a70 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
25a80 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
25a90 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
25aa0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
25ab0 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
25ac0 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
25ad0 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
25ae0 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
25af0 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
25b00 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
25b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76  .void sqlite3Inv
25b20 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  alidFunction(sql
25b30 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
25b40 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
25b50 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  *);.sqlite3_int6
25b60 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72  4 sqlite3StmtCur
25b70 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33  rentTime(sqlite3
25b80 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  _context*);.int 
25b90 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
25ba0 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
25bb0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
25bc0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
25bd0 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
25be0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
25bf0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
25c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
25c10 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29  serReset(Parse*)
25c20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  ;.int sqlite3Rep
25c30 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76  repare(Vdbe*);.v
25c40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
25c50 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50  istCheckLength(P
25c60 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
25c70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25c80 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
25c90 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c  BinaryCompareCol
25ca0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78  lSeq(Parse *, Ex
25cb0 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  pr *, Expr *);.i
25cc0 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e  nt sqlite3TempIn
25cd0 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c  Memory(const sql
25ce0 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68  ite3*);.const ch
25cf0 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
25d00 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b  alModename(int);
25d10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25d20 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73  OMIT_WAL.  int s
25d30 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
25d40 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
25d50 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  int, int*, int*)
25d60 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57  ;.  int sqlite3W
25d70 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f  alDefaultHook(vo
25d80 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
25d90 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23  st char*,int);.#
25da0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
25db0 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20  LITE_OMIT_CTE.  
25dc0 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74  With *sqlite3Wit
25dd0 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68  hAdd(Parse*,With
25de0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
25df0 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  t*,Select*);.  v
25e00 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44  oid sqlite3WithD
25e10 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57  elete(sqlite3*,W
25e20 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ith*);.  void sq
25e30 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61  lite3WithPush(Pa
25e40 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29  rse*, With*, u8)
25e50 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
25e60 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
25e70 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73  x,y,z).#define s
25e80 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
25e90 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (x,y).#endif../*
25ea0 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   Declarations fo
25eb0 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66  r functions in f
25ec0 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68  key.c. All of th
25ed0 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64  ese are replaced
25ee0 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63   by.** no-op mac
25ef0 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45  ros if OMIT_FORE
25f00 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e  IGN_KEY is defin
25f10 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
25f20 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b   no foreign.** k
25f30 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  ey functionality
25f40 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49   is available. I
25f50 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69  f OMIT_TRIGGER i
25f60 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a  s defined but.**
25f70 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
25f80 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73  Y is not, only s
25f90 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ome of the funct
25fa0 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64  ions are no-oped
25fb0 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73  . In.** this cas
25fc0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  e foreign keys a
25fd0 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e  re parsed, but n
25fe0 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e  o other function
25ff0 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f  ality is .** pro
26000 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
26010 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
26020 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
26030 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
26040 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
26050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26060 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
26070 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
26080 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
26090 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
260a0 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
260b0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
260c0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
260d0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
260e0 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
260f0 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
26100 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26110 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
26120 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
26130 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
26140 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
26150 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
26160 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
26170 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
26180 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
26190 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
261a0 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
261b0 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
261c0 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
261d0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
261e0 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
261f0 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
26200 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
26210 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
26220 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26230 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
26240 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26250 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
26260 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
26270 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
26280 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
26290 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
262a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
262b0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
262c0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
262d0 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
262e0 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
262f0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
26300 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
26310 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
26320 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
26330 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
26340 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
26350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
26360 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
26370 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
26380 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
26390 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
263a0 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
263b0 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
263c0 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
263d0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
263e0 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
263f0 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
26400 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
26410 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
26420 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
26430 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
26440 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
26450 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
26460 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
26470 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
26480 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
26490 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  if SQLITE_OMIT_B
264a0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69  UILTIN_TEST.** i
264b0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
264c0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
264d0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
264e0 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
264f0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
26500 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
26510 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
26520 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
26530 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
26540 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
26550 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
26560 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
26570 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
26580 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
26590 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
265a0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
265b0 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
265c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
265d0 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
265e0 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
265f0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
26600 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
26610 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
26620 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
26630 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
26640 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
26650 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
26660 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
26670 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
26680 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
26690 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
266a0 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
266b0 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
266c0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
266d0 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
266e0 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
266f0 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
26700 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
26710 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
26720 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
26730 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
26740 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
26750 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
26760 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
26770 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
26780 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
26790 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
267a0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
267b0 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
267c0 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
267d0 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
267e0 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
267f0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
26800 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
26810 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
26820 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
26830 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
26840 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
26850 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
26860 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66  u32, int*);..#if
26870 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26880 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
26890 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
268a0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
268b0 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
268c0 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
268d0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
268e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
268f0 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
26900 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73  _vfs *);.  int s
26910 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
26920 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
26930 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
26940 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
26950 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
26960 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
26970 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
26980 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66  Size(pVfs) ((pVf
26990 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20  s)->szOsFile).  
269a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
269b0 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20  ournalExists(p) 
269c0 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  1.#endif..void s
269d0 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
269e0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
269f0 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
26a00 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  3MemJournalSize(
26a10 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
26a20 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73  e3IsMemJournal(s
26a30 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
26a40 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
26a50 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76  EXPR_DEPTH>0.  v
26a60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
26a70 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a  etHeight(Parse *
26a80 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
26a90 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  ;.  int sqlite3S
26aa0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
26ab0 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
26ac0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
26ad0 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
26ae0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
26af0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
26b00 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a  rSetHeight(x,y).
26b10 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26b20 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
26b30 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
26b40 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
26b50 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
26b60 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
26b70 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
26b80 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
26b90 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
26ba0 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
26bb0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
26bc0 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
26bd0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
26be0 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
26bf0 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
26c00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
26c10 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
26c20 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
26c30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
26c40 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
26c50 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
26c60 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
26c70 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
26c80 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
26c90 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
26ca0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
26cb0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26cc0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
26cd0 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
26ce0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26cf0 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
26d00 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
26d10 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
26d20 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
26d30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
26d40 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
26d50 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
26d60 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
26d70 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
26d80 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
26d90 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
26da0 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
26db0 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
26dc0 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66  ages. .*/.#ifdef
26dd0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
26de0 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
26df0 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
26e00 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
26e10 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
26e20 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
26e30 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
26e40 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
26e50 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a  E_EXTERN void (*
26e60 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28  sqlite3IoTrace)(
26e70 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
26e80 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26e90 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65   IOTRACE(A).# de
26ea0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
26eb0 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65  IOTraceSql(X).#e
26ec0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  ndif../*.** Thes
26ed0 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61  e routines are a
26ee0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65  vailable for the
26ef0 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e   mem2.c debuggin
26f00 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  g memory allocat
26f10 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  or.** only.  The
26f20 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65  y are used to ve
26f30 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72  rify that differ
26f40 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d  ent "types" of m
26f50 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  emory.** allocat
26f60 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c  ions are properl
26f70 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65  y tracked by the
26f80 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73   system..**.** s
26f90 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
26fa0 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65  tType() sets the
26fb0 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c   "type" of an al
26fc0 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20  location to one 
26fd0 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50  of.** the MEMTYP
26fe0 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  E_* macros defin
26ff0 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74  ed below.  The t
27000 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69  ype must be a bi
27010 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20  tmask with.** a 
27020 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a  single bit set..
27030 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
27040 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72  debugHasType() r
27050 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61  eturns true if a
27060 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ny of the bits i
27070 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
27080 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
27090 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
270a0 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
270b0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
270c0 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33  pe()..** sqlite3
270d0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
270e0 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  ) is intended fo
270f0 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73  r use inside ass
27100 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
27110 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
27120 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20  emdebugNoType() 
27130 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
27140 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73  none of the bits
27150 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
27160 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
27170 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
27180 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
27190 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
271a0 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65  Type()..**.** Pe
271b0 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69  rhaps the most i
271c0 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69  mportant point i
271d0 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  s the difference
271e0 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45   between MEMTYPE
271f0 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d  _HEAP.** and MEM
27200 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20  TYPE_LOOKASIDE. 
27210 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   If an allocatio
27220 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  n is MEMTYPE_LOO
27230 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61  KASIDE, that mea
27240 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68  ns.** it might h
27250 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74  ave been allocat
27260 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c  ed by lookaside,
27270 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f   except the allo
27280 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f  cation was.** to
27290 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61  o large or looka
272a0 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79  side was already
272b0 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d   full.  It is im
272c0 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66  portant to verif
272d0 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61  y.** that alloca
272e0 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
272f0 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73   have been satis
27300 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  fied by lookasid
27310 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73  e are not.** pas
27320 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d  sed back to non-
27330 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
27340 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65   routines.  Asse
27350 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a  rts such as the.
27360 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65  ** example above
27370 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74   are placed on t
27380 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  he non-lookaside
27390 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
273a0 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
273b0 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a  is constraint. .
273c0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
273d0 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
273e0 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
273f0 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
27400 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
27410 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
27420 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
27430 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
27440 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
27450 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
27460 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
27470 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
27480 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
27490 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
274a0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
274b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
274c0 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
274d0 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
274e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
274f0 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
27500 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
27510 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
27520 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
27530 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
27540 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
27550 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
27560 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
27570 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
27580 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
27590 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
275a0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
275b0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
275c0 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20   0x02  /* Might 
275d0 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
275e0 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64  ide memory */.#d
275f0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
27600 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
27610 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
27620 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
27630 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
27640 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
27650 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
27660 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
27670 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20  EMTYPE_DB       
27680 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20    0x10  /* Uses 
27690 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c  sqlite3DbMalloc,
276a0 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   not sqlite_mall
276b0 6f 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  oc */../*.** Thr
276c0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
276d0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
276e0 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
276f0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
27700 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
27710 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
27720 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
27730 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
27740 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
27750 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
27760 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
27770 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
27780 20 2a 2f 0a                                       */.